import Pretty.Defs.Basic import Pretty.Supports.Basic import Pretty.Supports.FactoryMath import Pretty.Supports.Domination /-! Various lemmas about list of measures when they are decreasing in last length and increasing in cost. -/ lemmalast_decreasing_head (h : last_decreasing (h: last_decreasing (x :: y :: xs)x ::x: ?m.7y ::y: ?m.17xs)) :xs: ?m.27x.last >x: ?m.7y.last :=y: ?m.17Goals accomplished! 🐙Goals accomplished! 🐙0 < List.length (x :: y :: xs)Goals accomplished! 🐙Goals accomplished! 🐙0 + 1 < List.length (x :: y :: xs)Goals accomplished! 🐙lemmaGoals accomplished! 🐙last_decreasing_rest (last_decreasing_rest: ∀ {α : Type} {x : Meas} {xs : List Meas}, last_decreasing (x :: xs) → last_decreasing xsh : last_decreasing (h: last_decreasing (x :: xs)x ::x: ?m.371xs)) : last_decreasingxs: ?m.379xs :=xs: ?m.379Goals accomplished! 🐙α✝: Type
x: Meas
xs: List Meas
h: last_decreasing (x :: xs)
i: ℕ
hi✝: i < List.length xs
hj✝: i + 1 < List.length xsα✝: Type
x: Meas
xs: List Meas
h: last_decreasing (x :: xs)
i: ℕ
hi✝: i < List.length xs
hj✝: i + 1 < List.length xsGoals accomplished! 🐙α✝: Type
x: Meas
xs: List Meas
h: last_decreasing (x :: xs)
i: ℕ
hi✝: i < List.length xs
hj✝: i + 1 < List.length xsi + 1 < List.length (x :: xs)α✝: Type
x: Meas
xs: List Meas
h: last_decreasing (x :: xs)
i: ℕ
hi✝: i < List.length xs
hj✝: i + 1 < List.length xsi + 1 < List.length (x :: xs)α✝: Type
x: Meas
xs: List Meas
h: last_decreasing (x :: xs)
i: ℕ
hi✝: i < List.length xs
hj✝: i + 1 < List.length xsi + 1 < List.length (x :: xs)α✝: Type
x: Meas
xs: List Meas
h: last_decreasing (x :: xs)
i: ℕ
hi✝: i < List.length xs
hj✝: i + 1 < List.length xsi + 1 ≤ List.length xsα✝: Type
x: Meas
xs: List Meas
h: last_decreasing (x :: xs)
i: ℕ
hi✝: i < List.length xs
hj✝: i + 1 < List.length xsi + 1 ≤ List.length xsα✝: Type
x: Meas
xs: List Meas
h: last_decreasing (x :: xs)
i: ℕ
hi✝: i < List.length xs
hj✝: i + 1 < List.length xsi + 1 < List.length (x :: xs)Goals accomplished! 🐙Goals accomplished! 🐙α✝: Type
x: Meas
xs: List Meas
h: last_decreasing (x :: xs)
i: ℕ
hi✝: i < List.length xs
hj✝: i + 1 < List.length xsGoals accomplished! 🐙α✝: Type
x: Meas
xs: List Meas
h: last_decreasing (x :: xs)
i: ℕ
hi✝: i < List.length xs
hj✝: i + 1 < List.length xsi + 1 + 1 < List.length (x :: xs)α✝: Type
x: Meas
xs: List Meas
h: last_decreasing (x :: xs)
i: ℕ
hi✝: i < List.length xs
hj✝: i + 1 < List.length xsi + 1 + 1 < List.length (x :: xs)α✝: Type
x: Meas
xs: List Meas
h: last_decreasing (x :: xs)
i: ℕ
hi✝: i < List.length xs
hj✝: i + 1 < List.length xsi + 1 + 1 < List.length (x :: xs)α✝: Type
x: Meas
xs: List Meas
h: last_decreasing (x :: xs)
i: ℕ
hi✝: i < List.length xs
hj✝: i + 1 < List.length xsi + 2 ≤ List.length xsα✝: Type
x: Meas
xs: List Meas
h: last_decreasing (x :: xs)
i: ℕ
hi✝: i < List.length xs
hj✝: i + 1 < List.length xsi + 2 ≤ List.length xsα✝: Type
x: Meas
xs: List Meas
h: last_decreasing (x :: xs)
i: ℕ
hi✝: i < List.length xs
hj✝: i + 1 < List.length xsi + 1 + 1 < List.length (x :: xs)Goals accomplished! 🐙Goals accomplished! 🐙lemmaGoals accomplished! 🐙last_decreasing_empty : @last_decreasinglast_decreasing_empty: ∀ {α : Type}, last_decreasing []αα: ?m.5411[] :=[]: List ?m.5415Goals accomplished! 🐙α: Typeα: TypelemmaGoals accomplished! 🐙last_decreasing_one : last_decreasing [last_decreasing_one: ∀ {α : Type} {x : Meas}, last_decreasing [x]x] :=x: ?m.5527Goals accomplished! 🐙last_decreasing [x]last_decreasing [x]lemmaGoals accomplished! 🐙last_decreasing_cons {last_decreasing_cons: ∀ {α : Type} (x y : Meas) (xs : List Meas), x.last > y.last → last_decreasing (y :: xs) → last_decreasing (x :: y :: xs)α :α: TypeType} (Type: Type 1xx: Measy : @Measy: Measα) (α: Typexs : List Meas) (xs: List Meash_last :h_last: x.last > y.lastx.last >x: Measy.last) (y: Meash : last_decreasing (h: last_decreasing (y :: xs)y ::y: Measxs)) : last_decreasing (xs: List Measx ::x: Measy ::y: Measxs) :=xs: List MeasGoals accomplished! 🐙last_decreasing (x :: y :: xs)last_decreasing (x :: y :: xs)α: Type
x, y: Meas
xs: List Meas
h_last: x.last > y.last
h: last_decreasing (y :: xs)
hi✝: Nat.zero < List.length (x :: y :: xs)
hj✝: Nat.zero + 1 < List.length (x :: y :: xs)
zeroα: Type
x, y: Meas
xs: List Meas
h_last: x.last > y.last
h: last_decreasing (y :: xs)
n✝: ℕ
hi✝: Nat.succ n✝ < List.length (x :: y :: xs)
hj✝: Nat.succ n✝ + 1 < List.length (x :: y :: xs)
succlast_decreasing (x :: y :: xs)Goals accomplished! 🐙last_decreasing (x :: y :: xs)Goals accomplished! 🐙α: Type
x, y: Meas
xs: List Meas
h_last: x.last > y.last
h: last_decreasing (y :: xs)
i: ℕ
hi✝: Nat.succ i < List.length (x :: y :: xs)
hj✝: Nat.succ i + 1 < List.length (x :: y :: xs)i < List.length (y :: xs)α: Type
x, y: Meas
xs: List Meas
h_last: x.last > y.last
h: last_decreasing (y :: xs)
i: ℕ
hi✝: Nat.succ i < List.length (x :: y :: xs)
hj✝: Nat.succ i + 1 < List.length (x :: y :: xs)i < List.length (y :: xs)α: Type
x, y: Meas
xs: List Meas
h_last: x.last > y.last
h: last_decreasing (y :: xs)
i: ℕ
hi✝: Nat.succ i < List.length (x :: y :: xs)
hj✝: Nat.succ i + 1 < List.length (x :: y :: xs)i < List.length (y :: xs)α: Type
x, y: Meas
xs: List Meas
h: last_decreasing (y :: xs)
i: ℕ
h_last: y.last + 1 ≤ x.last
hi✝: i ≤ List.length xs
hj✝: i + 1 ≤ List.length xsi ≤ List.length xsα: Type
x, y: Meas
xs: List Meas
h_last: x.last > y.last
h: last_decreasing (y :: xs)
i: ℕ
hi✝: Nat.succ i < List.length (x :: y :: xs)
hj✝: Nat.succ i + 1 < List.length (x :: y :: xs)i < List.length (y :: xs)Goals accomplished! 🐙Goals accomplished! 🐙Goals accomplished! 🐙α: Type
x, y: Meas
xs: List Meas
h: last_decreasing (y :: xs)
i: ℕ
h_last: y.last + 1 ≤ x.last
hi✝: i ≤ List.length xs
hj✝: i + 1 ≤ List.length xsi + 1 ≤ List.length xsGoals accomplished! 🐙Goals accomplished! 🐙lemmaGoals accomplished! 🐙last_decreasing_strong (last_decreasing_strong: ∀ {α : Type} {ms : List Meas}, last_decreasing ms → ∀ (i j : ℕ) (h_i : i < List.length ms) (h_j : j < List.length ms), i < j → (List.get ms { val := i, isLt := h_i }).last > (List.get ms { val := j, isLt := h_j }).lasth : last_decreasingh: last_decreasing msms) : ∀ (ms: ?m.9152ii: ℕj :j: ℕℕ) (ℕ: Typeh_i :h_i: i < List.length msi <i: ℕms.length) (ms: ?m.9152h_j :h_j: j < List.length msj <j: ℕms.length),ms: ?m.9152i <i: ℕj → (j: ℕms.ms: ?m.9152get ⟨get: {α : Type ?u.9192} → (as : List α) → Fin (List.length as) → αi,i: ℕGoals accomplished! 🐙i < List.length ms⟩).last > (Goals accomplished! 🐙ms.ms: ?m.9152get ⟨get: {α : Type ?u.9206} → (as : List α) → Fin (List.length as) → αj,j: ℕGoals accomplished! 🐙j < List.length ms⟩).last :=Goals accomplished! 🐙Goals accomplished! 🐙∀ (i j : ℕ) (h_i : i < List.length ms) (h_j : j < List.length ms), i < j → (List.get ms { val := i, isLt := h_i }).last > (List.get ms { val := j, isLt := h_j }).lastα✝: Type
ms: List Meas
h: last_decreasing ms
i, j: ℕ
hi: i < List.length ms
hj: j < List.length ms
h_lt: i < j∀ (i j : ℕ) (h_i : i < List.length ms) (h_j : j < List.length ms), i < j → (List.get ms { val := i, isLt := h_i }).last > (List.get ms { val := j, isLt := h_j }).last
nilα✝: Type
head✝: Meas
tail✝: List Meas
tail_ih✝: last_decreasing tail✝ → ∀ (i j : ℕ) (hi : i < List.length tail✝) (hj : j < List.length tail✝), i < j → (List.get tail✝ { val := i, isLt := hi }).last > (List.get tail✝ { val := j, isLt := hj }).last
h: last_decreasing (head✝ :: tail✝)
i, j: ℕ
hi: i < List.length (head✝ :: tail✝)
hj: j < List.length (head✝ :: tail✝)
h_lt: i < j
cons∀ (i j : ℕ) (h_i : i < List.length ms) (h_j : j < List.length ms), i < j → (List.get ms { val := i, isLt := h_i }).last > (List.get ms { val := j, isLt := h_j }).lastGoals accomplished! 🐙∀ (i j : ℕ) (h_i : i < List.length ms) (h_j : j < List.length ms), i < j → (List.get ms { val := i, isLt := h_i }).last > (List.get ms { val := j, isLt := h_j }).lastα✝: Type
hd: Meas
tl: List Meas
ih: last_decreasing tl → ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → (List.get tl { val := i, isLt := hi }).last > (List.get tl { val := j, isLt := hj }).last
h: last_decreasing (hd :: tl)
i, j: ℕ
hi: i < List.length (hd :: tl)
hj: j < List.length (hd :: tl)
h_lt: i < jα✝: Type
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
i, j: ℕ
hi: i < List.length (hd :: tl)
hj: j < List.length (hd :: tl)
h_lt: i < j
ih: ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → (List.get tl { val := i, isLt := hi }).last > (List.get tl { val := j, isLt := hj }).lastα✝: Type
hd: Meas
tl: List Meas
ih: last_decreasing tl → ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → (List.get tl { val := i, isLt := hi }).last > (List.get tl { val := j, isLt := hj }).last
h: last_decreasing (hd :: tl)
i, j: ℕ
hi: i < List.length (hd :: tl)
hj: j < List.length (hd :: tl)
h_lt: i < jα✝: Type
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
j: ℕ
hj: j < List.length (hd :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → (List.get tl { val := i, isLt := hi }).last > (List.get tl { val := j, isLt := hj }).last
hi: Nat.zero < List.length (hd :: tl)
h_lt: Nat.zero < j
zeroα✝: Type
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
j: ℕ
hj: j < List.length (hd :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → (List.get tl { val := i, isLt := hi }).last > (List.get tl { val := j, isLt := hj }).last
n✝: ℕ
hi: Nat.succ n✝ < List.length (hd :: tl)
h_lt: Nat.succ n✝ < j
succα✝: Type
hd: Meas
tl: List Meas
ih: last_decreasing tl → ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → (List.get tl { val := i, isLt := hi }).last > (List.get tl { val := j, isLt := hj }).last
h: last_decreasing (hd :: tl)
i, j: ℕ
hi: i < List.length (hd :: tl)
hj: j < List.length (hd :: tl)
h_lt: i < jα✝: Type
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
j: ℕ
hj: j < List.length (hd :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → (List.get tl { val := i, isLt := hi }).last > (List.get tl { val := j, isLt := hj }).last
hi: Nat.zero < List.length (hd :: tl)
h_lt: Nat.zero < jα✝: Type
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → (List.get tl { val := i, isLt := hi }).last > (List.get tl { val := j, isLt := hj }).last
hi, hj: Nat.zero < List.length (hd :: tl)
h_lt: Nat.zero < Nat.zero
zeroα✝: Type
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → (List.get tl { val := i, isLt := hi }).last > (List.get tl { val := j, isLt := hj }).last
hi: Nat.zero < List.length (hd :: tl)
n✝: ℕ
hj: Nat.succ n✝ < List.length (hd :: tl)
h_lt: Nat.zero < Nat.succ n✝
succα✝: Type
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
j: ℕ
hj: j < List.length (hd :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → (List.get tl { val := i, isLt := hi }).last > (List.get tl { val := j, isLt := hj }).last
hi: Nat.zero < List.length (hd :: tl)
h_lt: Nat.zero < jα✝: Type
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → (List.get tl { val := i, isLt := hi }).last > (List.get tl { val := j, isLt := hj }).last
hi, hj: Nat.zero < List.length (hd :: tl)
h_lt: Nat.zero < Nat.zeroGoals accomplished! 🐙α✝: Type
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
j: ℕ
hj: j < List.length (hd :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → (List.get tl { val := i, isLt := hi }).last > (List.get tl { val := j, isLt := hj }).last
hi: Nat.zero < List.length (hd :: tl)
h_lt: Nat.zero < jα✝: Type
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → (List.get tl { val := i, isLt := hi }).last > (List.get tl { val := j, isLt := hj }).last
hi: Nat.zero < List.length (hd :: tl)
j: ℕ
hj: Nat.succ j < List.length (hd :: tl)
h_lt: Nat.zero < Nat.succ jα✝: Type
hd: Meas
j: ℕ
h_lt: Nat.zero < Nat.succ j
h: last_decreasing [hd]
ih: ∀ (i j : ℕ) (hi : i < List.length []) (hj : j < List.length []), i < j → (List.get [] { val := i, isLt := hi }).last > (List.get [] { val := j, isLt := hj }).last
hi: Nat.zero < List.length [hd]
hj: Nat.succ j < List.length [hd]
nilα✝: Type
hd: Meas
j: ℕ
h_lt: Nat.zero < Nat.succ j
head✝: Meas
tail✝: List Meas
h: last_decreasing (hd :: head✝ :: tail✝)
ih: ∀ (i j : ℕ) (hi : i < List.length (head✝ :: tail✝)) (hj : j < List.length (head✝ :: tail✝)), i < j → (List.get (head✝ :: tail✝) { val := i, isLt := hi }).last > (List.get (head✝ :: tail✝) { val := j, isLt := hj }).last
hi: Nat.zero < List.length (hd :: head✝ :: tail✝)
hj: Nat.succ j < List.length (hd :: head✝ :: tail✝)
consα✝: Type
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → (List.get tl { val := i, isLt := hi }).last > (List.get tl { val := j, isLt := hj }).last
hi: Nat.zero < List.length (hd :: tl)
j: ℕ
hj: Nat.succ j < List.length (hd :: tl)
h_lt: Nat.zero < Nat.succ jα✝: Type
hd: Meas
j: ℕ
h_lt: Nat.zero < Nat.succ j
h: last_decreasing [hd]
ih: ∀ (i j : ℕ) (hi : i < List.length []) (hj : j < List.length []), i < j → (List.get [] { val := i, isLt := hi }).last > (List.get [] { val := j, isLt := hj }).last
hi: Nat.zero < List.length [hd]
hj: Nat.succ j < List.length [hd]Goals accomplished! 🐙α✝: Type
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → (List.get tl { val := i, isLt := hi }).last > (List.get tl { val := j, isLt := hj }).last
hi: Nat.zero < List.length (hd :: tl)
j: ℕ
hj: Nat.succ j < List.length (hd :: tl)
h_lt: Nat.zero < Nat.succ jα✝: Type
hd: Meas
j: ℕ
h_lt: Nat.zero < Nat.succ j
hd2: Meas
tl: List Meas
h: last_decreasing (hd :: hd2 :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length (hd2 :: tl)) (hj : j < List.length (hd2 :: tl)), i < j → (List.get (hd2 :: tl) { val := i, isLt := hi }).last > (List.get (hd2 :: tl) { val := j, isLt := hj }).last
hi: Nat.zero < List.length (hd :: hd2 :: tl)
hj: Nat.succ j < List.length (hd :: hd2 :: tl)α✝: Type
hd, hd2: Meas
tl: List Meas
h: last_decreasing (hd :: hd2 :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length (hd2 :: tl)) (hj : j < List.length (hd2 :: tl)), i < j → (List.get (hd2 :: tl) { val := i, isLt := hi }).last > (List.get (hd2 :: tl) { val := j, isLt := hj }).last
hi: Nat.zero < List.length (hd :: hd2 :: tl)
h_lt: Nat.zero < Nat.succ Nat.zero
hj: Nat.succ Nat.zero < List.length (hd :: hd2 :: tl)
zeroα✝: Type
hd, hd2: Meas
tl: List Meas
h: last_decreasing (hd :: hd2 :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length (hd2 :: tl)) (hj : j < List.length (hd2 :: tl)), i < j → (List.get (hd2 :: tl) { val := i, isLt := hi }).last > (List.get (hd2 :: tl) { val := j, isLt := hj }).last
hi: Nat.zero < List.length (hd :: hd2 :: tl)
n✝: ℕ
h_lt: Nat.zero < Nat.succ (Nat.succ n✝)
hj: Nat.succ (Nat.succ n✝) < List.length (hd :: hd2 :: tl)
succα✝: Type
hd: Meas
j: ℕ
h_lt: Nat.zero < Nat.succ j
hd2: Meas
tl: List Meas
h: last_decreasing (hd :: hd2 :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length (hd2 :: tl)) (hj : j < List.length (hd2 :: tl)), i < j → (List.get (hd2 :: tl) { val := i, isLt := hi }).last > (List.get (hd2 :: tl) { val := j, isLt := hj }).last
hi: Nat.zero < List.length (hd :: hd2 :: tl)
hj: Nat.succ j < List.length (hd :: hd2 :: tl)α✝: Type
hd, hd2: Meas
tl: List Meas
h: last_decreasing (hd :: hd2 :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length (hd2 :: tl)) (hj : j < List.length (hd2 :: tl)), i < j → (List.get (hd2 :: tl) { val := i, isLt := hi }).last > (List.get (hd2 :: tl) { val := j, isLt := hj }).last
hi: Nat.zero < List.length (hd :: hd2 :: tl)
h_lt: Nat.zero < Nat.succ Nat.zero
hj: Nat.succ Nat.zero < List.length (hd :: hd2 :: tl)Goals accomplished! 🐙α✝: Type
hd: Meas
j: ℕ
h_lt: Nat.zero < Nat.succ j
hd2: Meas
tl: List Meas
h: last_decreasing (hd :: hd2 :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length (hd2 :: tl)) (hj : j < List.length (hd2 :: tl)), i < j → (List.get (hd2 :: tl) { val := i, isLt := hi }).last > (List.get (hd2 :: tl) { val := j, isLt := hj }).last
hi: Nat.zero < List.length (hd :: hd2 :: tl)
hj: Nat.succ j < List.length (hd :: hd2 :: tl)α✝: Type
hd, hd2: Meas
tl: List Meas
h: last_decreasing (hd :: hd2 :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length (hd2 :: tl)) (hj : j < List.length (hd2 :: tl)), i < j → (List.get (hd2 :: tl) { val := i, isLt := hi }).last > (List.get (hd2 :: tl) { val := j, isLt := hj }).last
hi: Nat.zero < List.length (hd :: hd2 :: tl)
j: ℕ
h_lt: Nat.zero < Nat.succ (Nat.succ j)
hj: Nat.succ (Nat.succ j) < List.length (hd :: hd2 :: tl)α✝: Type
hd, hd2: Meas
tl: List Meas
h: last_decreasing (hd :: hd2 :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length (hd2 :: tl)) (hj : j < List.length (hd2 :: tl)), i < j → (List.get (hd2 :: tl) { val := i, isLt := hi }).last > (List.get (hd2 :: tl) { val := j, isLt := hj }).last
hi: Nat.zero < List.length (hd :: hd2 :: tl)
j: ℕ
h_lt: Nat.zero < Nat.succ (Nat.succ j)
hj: Nat.succ (Nat.succ j) < List.length (hd :: hd2 :: tl)
this: hd.last > hd2.lastα✝: Type
hd, hd2: Meas
tl: List Meas
h: last_decreasing (hd :: hd2 :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length (hd2 :: tl)) (hj : j < List.length (hd2 :: tl)), i < j → (List.get (hd2 :: tl) { val := i, isLt := hi }).last > (List.get (hd2 :: tl) { val := j, isLt := hj }).last
hi: Nat.zero < List.length (hd :: hd2 :: tl)
j: ℕ
h_lt: Nat.zero < Nat.succ (Nat.succ j)
hj: Nat.succ (Nat.succ j) < List.length (hd :: hd2 :: tl)α✝: Type
hd, hd2: Meas
tl: List Meas
h: last_decreasing (hd :: hd2 :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length (hd2 :: tl)) (hj : j < List.length (hd2 :: tl)), i < j → (List.get (hd2 :: tl) { val := i, isLt := hi }).last > (List.get (hd2 :: tl) { val := j, isLt := hj }).last
hi: Nat.zero < List.length (hd :: hd2 :: tl)
j: ℕ
h_lt: Nat.zero < Nat.succ (Nat.succ j)
hj: Nat.succ (Nat.succ j) < Nat.succ (Nat.succ (List.length tl))
this: hd.last > hd2.lastα✝: Type
hd, hd2: Meas
tl: List Meas
h: last_decreasing (hd :: hd2 :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length (hd2 :: tl)) (hj : j < List.length (hd2 :: tl)), i < j → (List.get (hd2 :: tl) { val := i, isLt := hi }).last > (List.get (hd2 :: tl) { val := j, isLt := hj }).last
hi: Nat.zero < List.length (hd :: hd2 :: tl)
j: ℕ
h_lt: Nat.zero < Nat.succ (Nat.succ j)
hj: Nat.succ (Nat.succ j) < List.length (hd :: hd2 :: tl)α✝: Type
hd, hd2: Meas
tl: List Meas
h: last_decreasing (hd :: hd2 :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length (hd2 :: tl)) (hj : j < List.length (hd2 :: tl)), i < j → (List.get (hd2 :: tl) { val := i, isLt := hi }).last > (List.get (hd2 :: tl) { val := j, isLt := hj }).last
hi: Nat.zero < List.length (hd :: hd2 :: tl)
j: ℕ
h_lt: Nat.zero < Nat.succ (Nat.succ j)
hj: Nat.succ (Nat.succ j) < Nat.succ (Nat.succ (List.length tl))
this: hd.last > hd2.lastGoals accomplished! 🐙α✝: Type
hd, hd2: Meas
tl: List Meas
h: last_decreasing (hd :: hd2 :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length (hd2 :: tl)) (hj : j < List.length (hd2 :: tl)), i < j → (List.get (hd2 :: tl) { val := i, isLt := hi }).last > (List.get (hd2 :: tl) { val := j, isLt := hj }).last
hi: Nat.zero < List.length (hd :: hd2 :: tl)
j: ℕ
h_lt: Nat.zero < Nat.succ (Nat.succ j)
hj: Nat.succ (Nat.succ j) < Nat.succ (Nat.succ (List.length tl))
this: hd.last > hd2.last0 < List.length (hd2 :: tl)Goals accomplished! 🐙α✝: Type
hd, hd2: Meas
tl: List Meas
h: last_decreasing (hd :: hd2 :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length (hd2 :: tl)) (hj : j < List.length (hd2 :: tl)), i < j → (List.get (hd2 :: tl) { val := i, isLt := hi }).last > (List.get (hd2 :: tl) { val := j, isLt := hj }).last
hi: Nat.zero < List.length (hd :: hd2 :: tl)
j: ℕ
h_lt: Nat.zero < Nat.succ (Nat.succ j)
hj: Nat.succ (Nat.succ j) < Nat.succ (Nat.succ (List.length tl))
this: hd.last > hd2.lastGoals accomplished! 🐙α✝: Type
hd, hd2: Meas
tl: List Meas
h: last_decreasing (hd :: hd2 :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length (hd2 :: tl)) (hj : j < List.length (hd2 :: tl)), i < j → (List.get (hd2 :: tl) { val := i, isLt := hi }).last > (List.get (hd2 :: tl) { val := j, isLt := hj }).last
hi: Nat.zero < List.length (hd :: hd2 :: tl)
j: ℕ
h_lt: Nat.zero < Nat.succ (Nat.succ j)
hj: Nat.succ (Nat.succ j) < Nat.succ (Nat.succ (List.length tl))
this: hd.last > hd2.lastj + 1 < List.length (hd2 :: tl)α✝: Type
hd, hd2: Meas
tl: List Meas
h: last_decreasing (hd :: hd2 :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length (hd2 :: tl)) (hj : j < List.length (hd2 :: tl)), i < j → (List.get (hd2 :: tl) { val := i, isLt := hi }).last > (List.get (hd2 :: tl) { val := j, isLt := hj }).last
hi: Nat.zero < List.length (hd :: hd2 :: tl)
j: ℕ
h_lt: Nat.zero < Nat.succ (Nat.succ j)
hj: Nat.succ (Nat.succ j) < Nat.succ (Nat.succ (List.length tl))
this: hd.last > hd2.lastj + 1 < List.length (hd2 :: tl)α✝: Type
hd, hd2: Meas
tl: List Meas
h: last_decreasing (hd :: hd2 :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length (hd2 :: tl)) (hj : j < List.length (hd2 :: tl)), i < j → (List.get (hd2 :: tl) { val := i, isLt := hi }).last > (List.get (hd2 :: tl) { val := j, isLt := hj }).last
hi: Nat.zero < List.length (hd :: hd2 :: tl)
j: ℕ
h_lt: Nat.zero < Nat.succ (Nat.succ j)
hj: Nat.succ (Nat.succ j) < Nat.succ (Nat.succ (List.length tl))
this: hd.last > hd2.lastj + 1 < List.length (hd2 :: tl)α✝: Type
hd, hd2: Meas
tl: List Meas
h: last_decreasing (hd :: hd2 :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length (hd2 :: tl)) (hj : j < List.length (hd2 :: tl)), i < j → (List.get (hd2 :: tl) { val := i, isLt := hi }).last > (List.get (hd2 :: tl) { val := j, isLt := hj }).last
hi: Nat.zero < List.length (hd :: hd2 :: tl)
j: ℕ
h_lt: Nat.zero < Nat.succ (Nat.succ j)
hj: Nat.succ (Nat.succ j) < Nat.succ (Nat.succ (List.length tl))
this: hd.last > hd2.lastj + 1 < Nat.succ (List.length tl)α✝: Type
hd, hd2: Meas
tl: List Meas
h: last_decreasing (hd :: hd2 :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length (hd2 :: tl)) (hj : j < List.length (hd2 :: tl)), i < j → (List.get (hd2 :: tl) { val := i, isLt := hi }).last > (List.get (hd2 :: tl) { val := j, isLt := hj }).last
hi: Nat.zero < List.length (hd :: hd2 :: tl)
j: ℕ
h_lt: Nat.zero < Nat.succ (Nat.succ j)
hj: Nat.succ (Nat.succ j) < Nat.succ (Nat.succ (List.length tl))
this: hd.last > hd2.lastj + 1 < List.length (hd2 :: tl)Goals accomplished! 🐙Goals accomplished! 🐙α✝: Type
hd, hd2: Meas
tl: List Meas
h: last_decreasing (hd :: hd2 :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length (hd2 :: tl)) (hj : j < List.length (hd2 :: tl)), i < j → (List.get (hd2 :: tl) { val := i, isLt := hi }).last > (List.get (hd2 :: tl) { val := j, isLt := hj }).last
hi: Nat.zero < List.length (hd :: hd2 :: tl)
j: ℕ
h_lt: Nat.zero < Nat.succ (Nat.succ j)
hj: Nat.succ (Nat.succ j) < Nat.succ (Nat.succ (List.length tl))
this: hd.last > hd2.lastGoals accomplished! 🐙α✝: Type
hd, hd2: Meas
tl: List Meas
h: last_decreasing (hd :: hd2 :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length (hd2 :: tl)) (hj : j < List.length (hd2 :: tl)), i < j → (List.get (hd2 :: tl) { val := i, isLt := hi }).last > (List.get (hd2 :: tl) { val := j, isLt := hj }).last
hi: Nat.zero < List.length (hd :: hd2 :: tl)
j: ℕ
h_lt: Nat.zero < Nat.succ (Nat.succ j)
hj: Nat.succ (Nat.succ j) < Nat.succ (Nat.succ (List.length tl))
this: hd.last > hd2.lastGoals accomplished! 🐙α✝: Type
hd, hd2: Meas
tl: List Meas
h: last_decreasing (hd :: hd2 :: tl)
hi: Nat.zero < List.length (hd :: hd2 :: tl)
j: ℕ
h_lt: Nat.zero < Nat.succ (Nat.succ j)
hj: Nat.succ (Nat.succ j) < Nat.succ (Nat.succ (List.length tl))
this: hd.last > hd2.last
ih: (List.get (hd2 :: tl) { val := 0, isLt := (_ : 0 < Nat.succ (List.length tl)) }).last > (List.get (hd2 :: tl) { val := j + 1, isLt := (_ : j + 1 < List.length (hd2 :: tl)) }).lastα✝: Type
hd, hd2: Meas
tl: List Meas
h: last_decreasing (hd :: hd2 :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length (hd2 :: tl)) (hj : j < List.length (hd2 :: tl)), i < j → (List.get (hd2 :: tl) { val := i, isLt := hi }).last > (List.get (hd2 :: tl) { val := j, isLt := hj }).last
hi: Nat.zero < List.length (hd :: hd2 :: tl)
j: ℕ
h_lt: Nat.zero < Nat.succ (Nat.succ j)
hj: Nat.succ (Nat.succ j) < List.length (hd :: hd2 :: tl)α✝: Type
hd, hd2: Meas
tl: List Meas
h: last_decreasing (hd :: hd2 :: tl)
hi: Nat.zero < List.length (hd :: hd2 :: tl)
j: ℕ
h_lt: Nat.zero < Nat.succ (Nat.succ j)
hj: Nat.succ (Nat.succ j) < Nat.succ (Nat.succ (List.length tl))
this: hd.last > hd2.last
ih: (List.get tl { val := j, isLt := (_ : j < List.length tl) }).last < hd2.lastα✝: Type
hd, hd2: Meas
tl: List Meas
h: last_decreasing (hd :: hd2 :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length (hd2 :: tl)) (hj : j < List.length (hd2 :: tl)), i < j → (List.get (hd2 :: tl) { val := i, isLt := hi }).last > (List.get (hd2 :: tl) { val := j, isLt := hj }).last
hi: Nat.zero < List.length (hd :: hd2 :: tl)
j: ℕ
h_lt: Nat.zero < Nat.succ (Nat.succ j)
hj: Nat.succ (Nat.succ j) < List.length (hd :: hd2 :: tl)α✝: Type
hd, hd2: Meas
tl: List Meas
h: last_decreasing (hd :: hd2 :: tl)
hi: Nat.zero < List.length (hd :: hd2 :: tl)
j: ℕ
h_lt: Nat.zero < Nat.succ (Nat.succ j)
hj: Nat.succ (Nat.succ j) < Nat.succ (Nat.succ (List.length tl))
this: hd.last > hd2.last
ih: (List.get tl { val := j, isLt := (_ : j < List.length tl) }).last < hd2.lastα✝: Type
hd, hd2: Meas
tl: List Meas
h: last_decreasing (hd :: hd2 :: tl)
hi: Nat.zero < List.length (hd :: hd2 :: tl)
j: ℕ
h_lt: Nat.zero < Nat.succ (Nat.succ j)
hj: Nat.succ (Nat.succ j) < Nat.succ (Nat.succ (List.length tl))
this: hd.last > hd2.last
ih: (List.get tl { val := j, isLt := (_ : j < List.length tl) }).last < hd2.last
aα✝: Type
hd, hd2: Meas
tl: List Meas
h: last_decreasing (hd :: hd2 :: tl)
hi: Nat.zero < List.length (hd :: hd2 :: tl)
j: ℕ
h_lt: Nat.zero < Nat.succ (Nat.succ j)
hj: Nat.succ (Nat.succ j) < Nat.succ (Nat.succ (List.length tl))
this: hd.last > hd2.last
ih: (List.get tl { val := j, isLt := (_ : j < List.length tl) }).last < hd2.last
aα✝: Type
hd, hd2: Meas
tl: List Meas
h: last_decreasing (hd :: hd2 :: tl)
hi: Nat.zero < List.length (hd :: hd2 :: tl)
j: ℕ
h_lt: Nat.zero < Nat.succ (Nat.succ j)
hj: Nat.succ (Nat.succ j) < Nat.succ (Nat.succ (List.length tl))
this: hd.last > hd2.last
ih: (List.get tl { val := j, isLt := (_ : j < List.length tl) }).last < hd2.last
bGoals accomplished! 🐙α✝: Type
hd: Meas
tl: List Meas
ih: last_decreasing tl → ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → (List.get tl { val := i, isLt := hi }).last > (List.get tl { val := j, isLt := hj }).last
h: last_decreasing (hd :: tl)
i, j: ℕ
hi: i < List.length (hd :: tl)
hj: j < List.length (hd :: tl)
h_lt: i < jα✝: Type
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
j: ℕ
hj: j < List.length (hd :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → (List.get tl { val := i, isLt := hi }).last > (List.get tl { val := j, isLt := hj }).last
i: ℕ
hi: Nat.succ i < List.length (hd :: tl)
h_lt: Nat.succ i < jα✝: Type
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → (List.get tl { val := i, isLt := hi }).last > (List.get tl { val := j, isLt := hj }).last
i: ℕ
hi: Nat.succ i < List.length (hd :: tl)
hj: Nat.zero < List.length (hd :: tl)
h_lt: Nat.succ i < Nat.zero
zeroα✝: Type
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → (List.get tl { val := i, isLt := hi }).last > (List.get tl { val := j, isLt := hj }).last
i: ℕ
hi: Nat.succ i < List.length (hd :: tl)
n✝: ℕ
hj: Nat.succ n✝ < List.length (hd :: tl)
h_lt: Nat.succ i < Nat.succ n✝
succα✝: Type
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
j: ℕ
hj: j < List.length (hd :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → (List.get tl { val := i, isLt := hi }).last > (List.get tl { val := j, isLt := hj }).last
i: ℕ
hi: Nat.succ i < List.length (hd :: tl)
h_lt: Nat.succ i < jα✝: Type
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → (List.get tl { val := i, isLt := hi }).last > (List.get tl { val := j, isLt := hj }).last
i: ℕ
hi: Nat.succ i < List.length (hd :: tl)
hj: Nat.zero < List.length (hd :: tl)
h_lt: Nat.succ i < Nat.zeroGoals accomplished! 🐙α✝: Type
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
j: ℕ
hj: j < List.length (hd :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → (List.get tl { val := i, isLt := hi }).last > (List.get tl { val := j, isLt := hj }).last
i: ℕ
hi: Nat.succ i < List.length (hd :: tl)
h_lt: Nat.succ i < jα✝: Type
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → (List.get tl { val := i, isLt := hi }).last > (List.get tl { val := j, isLt := hj }).last
i: ℕ
hi: Nat.succ i < List.length (hd :: tl)
j: ℕ
hj: Nat.succ j < List.length (hd :: tl)
h_lt: Nat.succ i < Nat.succ jα✝: Type
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → (List.get tl { val := i, isLt := hi }).last > (List.get tl { val := j, isLt := hj }).last
i: ℕ
hi: Nat.succ i < Nat.succ (List.length tl)
j: ℕ
hj: Nat.succ j < Nat.succ (List.length tl)
h_lt: Nat.succ i < Nat.succ jα✝: Type
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → (List.get tl { val := i, isLt := hi }).last > (List.get tl { val := j, isLt := hj }).last
i: ℕ
hi: Nat.succ i < List.length (hd :: tl)
j: ℕ
hj: Nat.succ j < List.length (hd :: tl)
h_lt: Nat.succ i < Nat.succ jα✝: Type
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → (List.get tl { val := i, isLt := hi }).last > (List.get tl { val := j, isLt := hj }).last
i: ℕ
hi: Nat.succ i < Nat.succ (List.length tl)
j: ℕ
hj: Nat.succ j < Nat.succ (List.length tl)
h_lt: Nat.succ i < Nat.succ jGoals accomplished! 🐙α✝: Type
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → (List.get tl { val := i, isLt := hi }).last > (List.get tl { val := j, isLt := hj }).last
i: ℕ
hi: Nat.succ i < Nat.succ (List.length tl)
j: ℕ
hj: Nat.succ j < Nat.succ (List.length tl)
h_lt: Nat.succ i < Nat.succ ji < List.length tlGoals accomplished! 🐙α✝: Type
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → (List.get tl { val := i, isLt := hi }).last > (List.get tl { val := j, isLt := hj }).last
i: ℕ
hi: Nat.succ i < Nat.succ (List.length tl)
j: ℕ
hj: Nat.succ j < Nat.succ (List.length tl)
h_lt: Nat.succ i < Nat.succ jGoals accomplished! 🐙α✝: Type
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → (List.get tl { val := i, isLt := hi }).last > (List.get tl { val := j, isLt := hj }).last
i: ℕ
hi: Nat.succ i < Nat.succ (List.length tl)
j: ℕ
hj: Nat.succ j < Nat.succ (List.length tl)
h_lt: Nat.succ i < Nat.succ jj < List.length tlGoals accomplished! 🐙α✝: Type
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → (List.get tl { val := i, isLt := hi }).last > (List.get tl { val := j, isLt := hj }).last
i: ℕ
hi: Nat.succ i < Nat.succ (List.length tl)
j: ℕ
hj: Nat.succ j < Nat.succ (List.length tl)
h_lt: Nat.succ i < Nat.succ jGoals accomplished! 🐙α✝: Type
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → (List.get tl { val := i, isLt := hi }).last > (List.get tl { val := j, isLt := hj }).last
i: ℕ
hi: Nat.succ i < Nat.succ (List.length tl)
j: ℕ
hj: Nat.succ j < Nat.succ (List.length tl)
h_lt: Nat.succ i < Nat.succ ji < jGoals accomplished! 🐙α✝: Type
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
i: ℕ
hi: Nat.succ i < Nat.succ (List.length tl)
j: ℕ
hj: Nat.succ j < Nat.succ (List.length tl)
h_lt: Nat.succ i < Nat.succ j
ih: (List.get tl { val := i, isLt := (_ : i < List.length tl) }).last > (List.get tl { val := j, isLt := (_ : j < List.length tl) }).lastα✝: Type
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → (List.get tl { val := i, isLt := hi }).last > (List.get tl { val := j, isLt := hj }).last
i: ℕ
hi: Nat.succ i < List.length (hd :: tl)
j: ℕ
hj: Nat.succ j < List.length (hd :: tl)
h_lt: Nat.succ i < Nat.succ jlemmaGoals accomplished! 🐙cost_increasing_head (cost_increasing_head: ∀ {α : Type} {F : Factory α} {x y : Meas} {xs : List Meas}, cost_increasing F (x :: y :: xs) → Factory.lt F x.cost y.costh : cost_increasingh: cost_increasing F (x :: y :: xs)F (F: ?m.21738x ::x: ?m.21748y ::y: ?m.21758xs)) :xs: ?m.21768F.ltF: ?m.21738x.x: ?m.21748costcost: {α : Type} → Meas → αy.y: ?m.21758cost :=cost: {α : Type} → Meas → αGoals accomplished! 🐙Factory.lt F x.cost y.costFactory.lt F x.cost y.costGoals accomplished! 🐙0 < List.length (x :: y :: xs)Goals accomplished! 🐙Factory.lt F x.cost y.costGoals accomplished! 🐙Goals accomplished! 🐙lemmaGoals accomplished! 🐙cost_increasing_rest (cost_increasing_rest: ∀ {α : Type} {F : Factory α} {x : Meas} {xs : List Meas}, cost_increasing F (x :: xs) → cost_increasing F xsh : cost_increasingh: cost_increasing F (x :: xs)F (F: ?m.22115x ::x: ?m.22125xs)) : cost_increasingxs: ?m.22133FF: ?m.22115xs :=xs: ?m.22133Goals accomplished! 🐙cost_increasing F xsα✝: Type
F: Factory α✝
x: Meas
xs: List Meas
h: cost_increasing F (x :: xs)
i: ℕ
hi✝: i < List.length xs
hj✝: i + 1 < List.length xsFactory.lt F (List.get xs { val := i, isLt := hi✝ }).cost (List.get xs { val := i + 1, isLt := hj✝ }).costcost_increasing F xsα✝: Type
F: Factory α✝
x: Meas
xs: List Meas
h: cost_increasing F (x :: xs)
i: ℕ
hi✝: i < List.length xs
hj✝: i + 1 < List.length xsFactory.lt F (List.get xs { val := i, isLt := hi✝ }).cost (List.get xs { val := i + 1, isLt := hj✝ }).costGoals accomplished! 🐙α✝: Type
F: Factory α✝
x: Meas
xs: List Meas
h: cost_increasing F (x :: xs)
i: ℕ
hi✝: i < List.length xs
hj✝: i + 1 < List.length xsi + 1 < List.length (x :: xs)α✝: Type
F: Factory α✝
x: Meas
xs: List Meas
h: cost_increasing F (x :: xs)
i: ℕ
hi✝: i < List.length xs
hj✝: i + 1 < List.length xsi + 1 < List.length (x :: xs)α✝: Type
F: Factory α✝
x: Meas
xs: List Meas
h: cost_increasing F (x :: xs)
i: ℕ
hi✝: i < List.length xs
hj✝: i + 1 < List.length xsi + 1 < List.length (x :: xs)α✝: Type
F: Factory α✝
x: Meas
xs: List Meas
h: cost_increasing F (x :: xs)
i: ℕ
hi✝: i < List.length xs
hj✝: i + 1 < List.length xsi + 1 ≤ List.length xsα✝: Type
F: Factory α✝
x: Meas
xs: List Meas
h: cost_increasing F (x :: xs)
i: ℕ
hi✝: i < List.length xs
hj✝: i + 1 < List.length xsi + 1 ≤ List.length xsα✝: Type
F: Factory α✝
x: Meas
xs: List Meas
h: cost_increasing F (x :: xs)
i: ℕ
hi✝: i < List.length xs
hj✝: i + 1 < List.length xsi + 1 < List.length (x :: xs)Goals accomplished! 🐙Goals accomplished! 🐙α✝: Type
F: Factory α✝
x: Meas
xs: List Meas
h: cost_increasing F (x :: xs)
i: ℕ
hi✝: i < List.length xs
hj✝: i + 1 < List.length xsFactory.lt F (List.get xs { val := i, isLt := hi✝ }).cost (List.get xs { val := i + 1, isLt := hj✝ }).costGoals accomplished! 🐙α✝: Type
F: Factory α✝
x: Meas
xs: List Meas
h: cost_increasing F (x :: xs)
i: ℕ
hi✝: i < List.length xs
hj✝: i + 1 < List.length xsi + 1 + 1 < List.length (x :: xs)α✝: Type
F: Factory α✝
x: Meas
xs: List Meas
h: cost_increasing F (x :: xs)
i: ℕ
hi✝: i < List.length xs
hj✝: i + 1 < List.length xsi + 1 + 1 < List.length (x :: xs)α✝: Type
F: Factory α✝
x: Meas
xs: List Meas
h: cost_increasing F (x :: xs)
i: ℕ
hi✝: i < List.length xs
hj✝: i + 1 < List.length xsi + 1 + 1 < List.length (x :: xs)α✝: Type
F: Factory α✝
x: Meas
xs: List Meas
h: cost_increasing F (x :: xs)
i: ℕ
hi✝: i < List.length xs
hj✝: i + 1 < List.length xsi + 2 ≤ List.length xsα✝: Type
F: Factory α✝
x: Meas
xs: List Meas
h: cost_increasing F (x :: xs)
i: ℕ
hi✝: i < List.length xs
hj✝: i + 1 < List.length xsi + 2 ≤ List.length xsα✝: Type
F: Factory α✝
x: Meas
xs: List Meas
h: cost_increasing F (x :: xs)
i: ℕ
hi✝: i < List.length xs
hj✝: i + 1 < List.length xsi + 1 + 1 < List.length (x :: xs)Goals accomplished! 🐙Goals accomplished! 🐙lemmaGoals accomplished! 🐙cost_increasing_empty : cost_increasingcost_increasing_empty: ∀ {α : Type} {F : Factory α}, cost_increasing F []FF: ?m.27168[] :=[]: List ?m.27175Goals accomplished! 🐙cost_increasing F []Factory.lt F (List.get [] { val := i✝, isLt := hi✝ }).cost (List.get [] { val := i✝ + 1, isLt := hj✝ }).costcost_increasing F []lemmaGoals accomplished! 🐙cost_increasing_one : cost_increasingcost_increasing_one: ∀ {α : Type} {F : Factory α} {x : Meas}, cost_increasing F [x]F [F: ?m.27288x] :=x: ?m.27298Goals accomplished! 🐙cost_increasing F [x]Factory.lt F (List.get [x] { val := i✝, isLt := hi✝ }).cost (List.get [x] { val := i✝ + 1, isLt := hj✝ }).costcost_increasing F [x]lemmaGoals accomplished! 🐙cost_increasing_cons (cost_increasing_cons: ∀ {α : Type} {F : Factory α} (x y : Meas) (xs : List Meas), Factory.lt F x.cost y.cost → cost_increasing F (y :: xs) → cost_increasing F (x :: y :: xs)xx: Measy : Meas) (y: Measxs : List Meas) (xs: List Meash_cost :h_cost: ?m.27794FF: ?m.27781.ltF.lt x.cost y.cost: Sort ?u.27776F.lt x.cost y.cost: Sort ?u.27776xx: Meas.F.lt x.cost y.cost: Sort ?u.27776costcost: {α : Type} → Meas → αF.lt x.cost y.cost: Sort ?u.27776yy: Meas.F.lt x.cost y.cost: Sort ?u.27776cost) (cost: {α : Type} → Meas → αh : cost_increasingh: cost_increasing F (y :: xs)F (F: ?m.27781y ::y: Measxs)) : cost_increasingxs: List MeasF (F: ?m.27781x ::x: Measy ::y: Measxs) :=xs: List MeasGoals accomplished! 🐙α✝: Type
F: Factory α✝
x, y: Meas
xs: List Meas
h_cost: Factory.lt F x.cost y.cost
h: cost_increasing F (y :: xs)cost_increasing F (x :: y :: xs)α✝: Type
F: Factory α✝
x, y: Meas
xs: List Meas
h_cost: Factory.lt F x.cost y.cost
h: cost_increasing F (y :: xs)
i: ℕ
hi✝: i < List.length (x :: y :: xs)
hj✝: i + 1 < List.length (x :: y :: xs)α✝: Type
F: Factory α✝
x, y: Meas
xs: List Meas
h_cost: Factory.lt F x.cost y.cost
h: cost_increasing F (y :: xs)cost_increasing F (x :: y :: xs)α✝: Type
F: Factory α✝
x, y: Meas
xs: List Meas
h_cost: Factory.lt F x.cost y.cost
h: cost_increasing F (y :: xs)
hi✝: Nat.zero < List.length (x :: y :: xs)
hj✝: Nat.zero + 1 < List.length (x :: y :: xs)
zeroα✝: Type
F: Factory α✝
x, y: Meas
xs: List Meas
h_cost: Factory.lt F x.cost y.cost
h: cost_increasing F (y :: xs)
n✝: ℕ
hi✝: Nat.succ n✝ < List.length (x :: y :: xs)
hj✝: Nat.succ n✝ + 1 < List.length (x :: y :: xs)
succα✝: Type
F: Factory α✝
x, y: Meas
xs: List Meas
h_cost: Factory.lt F x.cost y.cost
h: cost_increasing F (y :: xs)cost_increasing F (x :: y :: xs)α✝: Type
F: Factory α✝
x, y: Meas
xs: List Meas
h_cost: Factory.lt F x.cost y.cost
h: cost_increasing F (y :: xs)
hi✝: Nat.zero < List.length (x :: y :: xs)
hj✝: Nat.zero + 1 < List.length (x :: y :: xs)Goals accomplished! 🐙α✝: Type
F: Factory α✝
x, y: Meas
xs: List Meas
h_cost: Factory.lt F x.cost y.cost
h: cost_increasing F (y :: xs)cost_increasing F (x :: y :: xs)α✝: Type
F: Factory α✝
x, y: Meas
xs: List Meas
h_cost: Factory.lt F x.cost y.cost
h: cost_increasing F (y :: xs)
i: ℕ
hi✝: Nat.succ i < List.length (x :: y :: xs)
hj✝: Nat.succ i + 1 < List.length (x :: y :: xs)α✝: Type
F: Factory α✝
x, y: Meas
xs: List Meas
h_cost: Factory.lt F x.cost y.cost
h: cost_increasing F (y :: xs)
i: ℕ
hi✝: Nat.succ i < List.length (x :: y :: xs)
hj✝: Nat.succ i + 1 < List.length (x :: y :: xs)Goals accomplished! 🐙α✝: Type
F: Factory α✝
x, y: Meas
xs: List Meas
h_cost: Factory.lt F x.cost y.cost
h: cost_increasing F (y :: xs)
i: ℕ
hi✝: Nat.succ i < List.length (x :: y :: xs)
hj✝: Nat.succ i + 1 < List.length (x :: y :: xs)i < List.length (y :: xs)α✝: Type
F: Factory α✝
x, y: Meas
xs: List Meas
h_cost: Factory.lt F x.cost y.cost
h: cost_increasing F (y :: xs)
i: ℕ
hi✝: Nat.succ i < List.length (x :: y :: xs)
hj✝: Nat.succ i + 1 < List.length (x :: y :: xs)i < List.length (y :: xs)α✝: Type
F: Factory α✝
x, y: Meas
xs: List Meas
h_cost: Factory.lt F x.cost y.cost
h: cost_increasing F (y :: xs)
i: ℕ
hi✝: Nat.succ i < List.length (x :: y :: xs)
hj✝: Nat.succ i + 1 < List.length (x :: y :: xs)i < List.length (y :: xs)α✝: Type
F: Factory α✝
x, y: Meas
xs: List Meas
h_cost: Factory.lt F x.cost y.cost
h: cost_increasing F (y :: xs)
i: ℕ
hi✝: i ≤ List.length xs
hj✝: i + 1 ≤ List.length xsi ≤ List.length xsα✝: Type
F: Factory α✝
x, y: Meas
xs: List Meas
h_cost: Factory.lt F x.cost y.cost
h: cost_increasing F (y :: xs)
i: ℕ
hi✝: Nat.succ i < List.length (x :: y :: xs)
hj✝: Nat.succ i + 1 < List.length (x :: y :: xs)i < List.length (y :: xs)Goals accomplished! 🐙Goals accomplished! 🐙α✝: Type
F: Factory α✝
x, y: Meas
xs: List Meas
h_cost: Factory.lt F x.cost y.cost
h: cost_increasing F (y :: xs)
i: ℕ
hi✝: Nat.succ i < List.length (x :: y :: xs)
hj✝: Nat.succ i + 1 < List.length (x :: y :: xs)Goals accomplished! 🐙α✝: Type
F: Factory α✝
x, y: Meas
xs: List Meas
h_cost: Factory.lt F x.cost y.cost
h: cost_increasing F (y :: xs)
i: ℕ
hi✝: Nat.succ i < List.length (x :: y :: xs)
hj✝: Nat.succ i + 1 < List.length (x :: y :: xs)i + 1 < List.length (y :: xs)α✝: Type
F: Factory α✝
x, y: Meas
xs: List Meas
h_cost: Factory.lt F x.cost y.cost
h: cost_increasing F (y :: xs)
i: ℕ
hi✝: Nat.succ i < List.length (x :: y :: xs)
hj✝: Nat.succ i + 1 < List.length (x :: y :: xs)i + 1 < List.length (y :: xs)α✝: Type
F: Factory α✝
x, y: Meas
xs: List Meas
h_cost: Factory.lt F x.cost y.cost
h: cost_increasing F (y :: xs)
i: ℕ
hi✝: Nat.succ i < List.length (x :: y :: xs)
hj✝: Nat.succ i + 1 < List.length (x :: y :: xs)i + 1 < List.length (y :: xs)α✝: Type
F: Factory α✝
x, y: Meas
xs: List Meas
h_cost: Factory.lt F x.cost y.cost
h: cost_increasing F (y :: xs)
i: ℕ
hi✝: i ≤ List.length xs
hj✝: i + 1 ≤ List.length xsi + 1 ≤ List.length xsα✝: Type
F: Factory α✝
x, y: Meas
xs: List Meas
h_cost: Factory.lt F x.cost y.cost
h: cost_increasing F (y :: xs)
i: ℕ
hi✝: Nat.succ i < List.length (x :: y :: xs)
hj✝: Nat.succ i + 1 < List.length (x :: y :: xs)i + 1 < List.length (y :: xs)Goals accomplished! 🐙Goals accomplished! 🐙lemmaGoals accomplished! 🐙cost_increasing_strong (cost_increasing_strong: ∀ {α : Type} {F : Factory α} {ms : List Meas}, cost_increasing F ms → ∀ (i j : ℕ) (h_i : i < List.length ms) (h_j : j < List.length ms), i < j → Factory.lt F (List.get ms { val := i, isLt := h_i }).cost (List.get ms { val := j, isLt := h_j }).costh : cost_increasingh: cost_increasing F msFF: ?m.30327ms) : ∀ (ms: ?m.30334ii: ℕj :j: ℕℕ) (ℕ: Typeh_i :h_i: i < List.length msi <i: ℕms.length) (ms: ?m.30334h_j :h_j: j < List.length msj <j: ℕms.length),ms: ?m.30334i <i: ℕj →j: ℕF.lt (F: ?m.30327ms.ms: ?m.30334get ⟨get: {α : Type ?u.30379} → (as : List α) → Fin (List.length as) → αi,i: ℕGoals accomplished! 🐙F: Factory ?m.30404
ms: List Meas
h: cost_increasing F ms
i, j: ℕ
h_i: i < List.length ms
h_j: j < List.length msi < List.length ms⟩).Goals accomplished! 🐙cost (cost: {α : Type} → Meas → αms.ms: ?m.30334get ⟨get: {α : Type ?u.30393} → (as : List α) → Fin (List.length as) → αj,j: ℕGoals accomplished! 🐙F: Factory ?m.30404
ms: List Meas
h: cost_increasing F ms
i, j: ℕ
h_i: i < List.length ms
h_j: j < List.length msj < List.length ms⟩).Goals accomplished! 🐙cost :=cost: {α : Type} → Meas → αGoals accomplished! 🐙∀ (i j : ℕ) (h_i : i < List.length ms) (h_j : j < List.length ms), i < j → Factory.lt F (List.get ms { val := i, isLt := h_i }).cost (List.get ms { val := j, isLt := h_j }).costα✝: Type
F: Factory α✝
ms: List Meas
h: cost_increasing F ms
i, j: ℕ
hi: i < List.length ms
hj: j < List.length ms
h_lt: i < jFactory.lt F (List.get ms { val := i, isLt := hi }).cost (List.get ms { val := j, isLt := hj }).cost∀ (i j : ℕ) (h_i : i < List.length ms) (h_j : j < List.length ms), i < j → Factory.lt F (List.get ms { val := i, isLt := h_i }).cost (List.get ms { val := j, isLt := h_j }).costα✝: Type
F: Factory α✝
h: cost_increasing F []
i, j: ℕ
hi: i < List.length []
hj: j < List.length []
h_lt: i < j
nilFactory.lt F (List.get [] { val := i, isLt := hi }).cost (List.get [] { val := j, isLt := hj }).costα✝: Type
F: Factory α✝
head✝: Meas
tail✝: List Meas
tail_ih✝: cost_increasing F tail✝ → ∀ (i j : ℕ) (hi : i < List.length tail✝) (hj : j < List.length tail✝), i < j → Factory.lt F (List.get tail✝ { val := i, isLt := hi }).cost (List.get tail✝ { val := j, isLt := hj }).cost
h: cost_increasing F (head✝ :: tail✝)
i, j: ℕ
hi: i < List.length (head✝ :: tail✝)
hj: j < List.length (head✝ :: tail✝)
h_lt: i < j
consFactory.lt F (List.get (head✝ :: tail✝) { val := i, isLt := hi }).cost (List.get (head✝ :: tail✝) { val := j, isLt := hj }).cost∀ (i j : ℕ) (h_i : i < List.length ms) (h_j : j < List.length ms), i < j → Factory.lt F (List.get ms { val := i, isLt := h_i }).cost (List.get ms { val := j, isLt := h_j }).costα✝: Type
F: Factory α✝
h: cost_increasing F []
i, j: ℕ
hi: i < List.length []
hj: j < List.length []
h_lt: i < jFactory.lt F (List.get [] { val := i, isLt := hi }).cost (List.get [] { val := j, isLt := hj }).costGoals accomplished! 🐙∀ (i j : ℕ) (h_i : i < List.length ms) (h_j : j < List.length ms), i < j → Factory.lt F (List.get ms { val := i, isLt := h_i }).cost (List.get ms { val := j, isLt := h_j }).costα✝: Type
F: Factory α✝
hd: Meas
tl: List Meas
ih: cost_increasing F tl → ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → Factory.lt F (List.get tl { val := i, isLt := hi }).cost (List.get tl { val := j, isLt := hj }).cost
h: cost_increasing F (hd :: tl)
i, j: ℕ
hi: i < List.length (hd :: tl)
hj: j < List.length (hd :: tl)
h_lt: i < jFactory.lt F (List.get (hd :: tl) { val := i, isLt := hi }).cost (List.get (hd :: tl) { val := j, isLt := hj }).costα✝: Type
F: Factory α✝
hd: Meas
tl: List Meas
h: cost_increasing F (hd :: tl)
i, j: ℕ
hi: i < List.length (hd :: tl)
hj: j < List.length (hd :: tl)
h_lt: i < j
ih: ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → Factory.lt F (List.get tl { val := i, isLt := hi }).cost (List.get tl { val := j, isLt := hj }).costFactory.lt F (List.get (hd :: tl) { val := i, isLt := hi }).cost (List.get (hd :: tl) { val := j, isLt := hj }).costα✝: Type
F: Factory α✝
hd: Meas
tl: List Meas
ih: cost_increasing F tl → ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → Factory.lt F (List.get tl { val := i, isLt := hi }).cost (List.get tl { val := j, isLt := hj }).cost
h: cost_increasing F (hd :: tl)
i, j: ℕ
hi: i < List.length (hd :: tl)
hj: j < List.length (hd :: tl)
h_lt: i < jFactory.lt F (List.get (hd :: tl) { val := i, isLt := hi }).cost (List.get (hd :: tl) { val := j, isLt := hj }).costα✝: Type
F: Factory α✝
hd: Meas
tl: List Meas
h: cost_increasing F (hd :: tl)
j: ℕ
hj: j < List.length (hd :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → Factory.lt F (List.get tl { val := i, isLt := hi }).cost (List.get tl { val := j, isLt := hj }).cost
hi: Nat.zero < List.length (hd :: tl)
h_lt: Nat.zero < j
zeroα✝: Type
F: Factory α✝
hd: Meas
tl: List Meas
h: cost_increasing F (hd :: tl)
j: ℕ
hj: j < List.length (hd :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → Factory.lt F (List.get tl { val := i, isLt := hi }).cost (List.get tl { val := j, isLt := hj }).cost
n✝: ℕ
hi: Nat.succ n✝ < List.length (hd :: tl)
h_lt: Nat.succ n✝ < j
succα✝: Type
F: Factory α✝
hd: Meas
tl: List Meas
ih: cost_increasing F tl → ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → Factory.lt F (List.get tl { val := i, isLt := hi }).cost (List.get tl { val := j, isLt := hj }).cost
h: cost_increasing F (hd :: tl)
i, j: ℕ
hi: i < List.length (hd :: tl)
hj: j < List.length (hd :: tl)
h_lt: i < jFactory.lt F (List.get (hd :: tl) { val := i, isLt := hi }).cost (List.get (hd :: tl) { val := j, isLt := hj }).costα✝: Type
F: Factory α✝
hd: Meas
tl: List Meas
h: cost_increasing F (hd :: tl)
j: ℕ
hj: j < List.length (hd :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → Factory.lt F (List.get tl { val := i, isLt := hi }).cost (List.get tl { val := j, isLt := hj }).cost
hi: Nat.zero < List.length (hd :: tl)
h_lt: Nat.zero < jα✝: Type
F: Factory α✝
hd: Meas
tl: List Meas
h: cost_increasing F (hd :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → Factory.lt F (List.get tl { val := i, isLt := hi }).cost (List.get tl { val := j, isLt := hj }).cost
hi, hj: Nat.zero < List.length (hd :: tl)
h_lt: Nat.zero < Nat.zero
zeroα✝: Type
F: Factory α✝
hd: Meas
tl: List Meas
h: cost_increasing F (hd :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → Factory.lt F (List.get tl { val := i, isLt := hi }).cost (List.get tl { val := j, isLt := hj }).cost
hi: Nat.zero < List.length (hd :: tl)
n✝: ℕ
hj: Nat.succ n✝ < List.length (hd :: tl)
h_lt: Nat.zero < Nat.succ n✝
succα✝: Type
F: Factory α✝
hd: Meas
tl: List Meas
h: cost_increasing F (hd :: tl)
j: ℕ
hj: j < List.length (hd :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → Factory.lt F (List.get tl { val := i, isLt := hi }).cost (List.get tl { val := j, isLt := hj }).cost
hi: Nat.zero < List.length (hd :: tl)
h_lt: Nat.zero < jα✝: Type
F: Factory α✝
hd: Meas
tl: List Meas
h: cost_increasing F (hd :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → Factory.lt F (List.get tl { val := i, isLt := hi }).cost (List.get tl { val := j, isLt := hj }).cost
hi, hj: Nat.zero < List.length (hd :: tl)
h_lt: Nat.zero < Nat.zeroGoals accomplished! 🐙α✝: Type
F: Factory α✝
hd: Meas
tl: List Meas
h: cost_increasing F (hd :: tl)
j: ℕ
hj: j < List.length (hd :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → Factory.lt F (List.get tl { val := i, isLt := hi }).cost (List.get tl { val := j, isLt := hj }).cost
hi: Nat.zero < List.length (hd :: tl)
h_lt: Nat.zero < jα✝: Type
F: Factory α✝
hd: Meas
tl: List Meas
h: cost_increasing F (hd :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → Factory.lt F (List.get tl { val := i, isLt := hi }).cost (List.get tl { val := j, isLt := hj }).cost
hi: Nat.zero < List.length (hd :: tl)
j: ℕ
hj: Nat.succ j < List.length (hd :: tl)
h_lt: Nat.zero < Nat.succ jα✝: Type
F: Factory α✝
hd: Meas
j: ℕ
h_lt: Nat.zero < Nat.succ j
h: cost_increasing F [hd]
ih: ∀ (i j : ℕ) (hi : i < List.length []) (hj : j < List.length []), i < j → Factory.lt F (List.get [] { val := i, isLt := hi }).cost (List.get [] { val := j, isLt := hj }).cost
hi: Nat.zero < List.length [hd]
hj: Nat.succ j < List.length [hd]
nilFactory.lt F (List.get [hd] { val := Nat.zero, isLt := hi }).cost (List.get [hd] { val := Nat.succ j, isLt := hj }).costα✝: Type
F: Factory α✝
hd: Meas
j: ℕ
h_lt: Nat.zero < Nat.succ j
head✝: Meas
tail✝: List Meas
h: cost_increasing F (hd :: head✝ :: tail✝)
ih: ∀ (i j : ℕ) (hi : i < List.length (head✝ :: tail✝)) (hj : j < List.length (head✝ :: tail✝)), i < j → Factory.lt F (List.get (head✝ :: tail✝) { val := i, isLt := hi }).cost (List.get (head✝ :: tail✝) { val := j, isLt := hj }).cost
hi: Nat.zero < List.length (hd :: head✝ :: tail✝)
hj: Nat.succ j < List.length (hd :: head✝ :: tail✝)
consα✝: Type
F: Factory α✝
hd: Meas
tl: List Meas
h: cost_increasing F (hd :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → Factory.lt F (List.get tl { val := i, isLt := hi }).cost (List.get tl { val := j, isLt := hj }).cost
hi: Nat.zero < List.length (hd :: tl)
j: ℕ
hj: Nat.succ j < List.length (hd :: tl)
h_lt: Nat.zero < Nat.succ jα✝: Type
F: Factory α✝
hd: Meas
j: ℕ
h_lt: Nat.zero < Nat.succ j
h: cost_increasing F [hd]
ih: ∀ (i j : ℕ) (hi : i < List.length []) (hj : j < List.length []), i < j → Factory.lt F (List.get [] { val := i, isLt := hi }).cost (List.get [] { val := j, isLt := hj }).cost
hi: Nat.zero < List.length [hd]
hj: Nat.succ j < List.length [hd]Factory.lt F (List.get [hd] { val := Nat.zero, isLt := hi }).cost (List.get [hd] { val := Nat.succ j, isLt := hj }).costGoals accomplished! 🐙α✝: Type
F: Factory α✝
hd: Meas
tl: List Meas
h: cost_increasing F (hd :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → Factory.lt F (List.get tl { val := i, isLt := hi }).cost (List.get tl { val := j, isLt := hj }).cost
hi: Nat.zero < List.length (hd :: tl)
j: ℕ
hj: Nat.succ j < List.length (hd :: tl)
h_lt: Nat.zero < Nat.succ jα✝: Type
F: Factory α✝
hd: Meas
j: ℕ
h_lt: Nat.zero < Nat.succ j
hd2: Meas
tl: List Meas
h: cost_increasing F (hd :: hd2 :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length (hd2 :: tl)) (hj : j < List.length (hd2 :: tl)), i < j → Factory.lt F (List.get (hd2 :: tl) { val := i, isLt := hi }).cost (List.get (hd2 :: tl) { val := j, isLt := hj }).cost
hi: Nat.zero < List.length (hd :: hd2 :: tl)
hj: Nat.succ j < List.length (hd :: hd2 :: tl)α✝: Type
F: Factory α✝
hd, hd2: Meas
tl: List Meas
h: cost_increasing F (hd :: hd2 :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length (hd2 :: tl)) (hj : j < List.length (hd2 :: tl)), i < j → Factory.lt F (List.get (hd2 :: tl) { val := i, isLt := hi }).cost (List.get (hd2 :: tl) { val := j, isLt := hj }).cost
hi: Nat.zero < List.length (hd :: hd2 :: tl)
h_lt: Nat.zero < Nat.succ Nat.zero
hj: Nat.succ Nat.zero < List.length (hd :: hd2 :: tl)
zeroα✝: Type
F: Factory α✝
hd, hd2: Meas
tl: List Meas
h: cost_increasing F (hd :: hd2 :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length (hd2 :: tl)) (hj : j < List.length (hd2 :: tl)), i < j → Factory.lt F (List.get (hd2 :: tl) { val := i, isLt := hi }).cost (List.get (hd2 :: tl) { val := j, isLt := hj }).cost
hi: Nat.zero < List.length (hd :: hd2 :: tl)
n✝: ℕ
h_lt: Nat.zero < Nat.succ (Nat.succ n✝)
hj: Nat.succ (Nat.succ n✝) < List.length (hd :: hd2 :: tl)
succα✝: Type
F: Factory α✝
hd: Meas
j: ℕ
h_lt: Nat.zero < Nat.succ j
hd2: Meas
tl: List Meas
h: cost_increasing F (hd :: hd2 :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length (hd2 :: tl)) (hj : j < List.length (hd2 :: tl)), i < j → Factory.lt F (List.get (hd2 :: tl) { val := i, isLt := hi }).cost (List.get (hd2 :: tl) { val := j, isLt := hj }).cost
hi: Nat.zero < List.length (hd :: hd2 :: tl)
hj: Nat.succ j < List.length (hd :: hd2 :: tl)α✝: Type
F: Factory α✝
hd, hd2: Meas
tl: List Meas
h: cost_increasing F (hd :: hd2 :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length (hd2 :: tl)) (hj : j < List.length (hd2 :: tl)), i < j → Factory.lt F (List.get (hd2 :: tl) { val := i, isLt := hi }).cost (List.get (hd2 :: tl) { val := j, isLt := hj }).cost
hi: Nat.zero < List.length (hd :: hd2 :: tl)
h_lt: Nat.zero < Nat.succ Nat.zero
hj: Nat.succ Nat.zero < List.length (hd :: hd2 :: tl)Goals accomplished! 🐙α✝: Type
F: Factory α✝
hd: Meas
j: ℕ
h_lt: Nat.zero < Nat.succ j
hd2: Meas
tl: List Meas
h: cost_increasing F (hd :: hd2 :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length (hd2 :: tl)) (hj : j < List.length (hd2 :: tl)), i < j → Factory.lt F (List.get (hd2 :: tl) { val := i, isLt := hi }).cost (List.get (hd2 :: tl) { val := j, isLt := hj }).cost
hi: Nat.zero < List.length (hd :: hd2 :: tl)
hj: Nat.succ j < List.length (hd :: hd2 :: tl)α✝: Type
F: Factory α✝
hd, hd2: Meas
tl: List Meas
h: cost_increasing F (hd :: hd2 :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length (hd2 :: tl)) (hj : j < List.length (hd2 :: tl)), i < j → Factory.lt F (List.get (hd2 :: tl) { val := i, isLt := hi }).cost (List.get (hd2 :: tl) { val := j, isLt := hj }).cost
hi: Nat.zero < List.length (hd :: hd2 :: tl)
j: ℕ
h_lt: Nat.zero < Nat.succ (Nat.succ j)
hj: Nat.succ (Nat.succ j) < List.length (hd :: hd2 :: tl)α✝: Type
F: Factory α✝
hd, hd2: Meas
tl: List Meas
h: cost_increasing F (hd :: hd2 :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length (hd2 :: tl)) (hj : j < List.length (hd2 :: tl)), i < j → Factory.lt F (List.get (hd2 :: tl) { val := i, isLt := hi }).cost (List.get (hd2 :: tl) { val := j, isLt := hj }).cost
hi: Nat.zero < List.length (hd :: hd2 :: tl)
j: ℕ
h_lt: Nat.zero < Nat.succ (Nat.succ j)
hj: Nat.succ (Nat.succ j) < List.length (hd :: hd2 :: tl)
this: Factory.lt F hd.cost hd2.costα✝: Type
F: Factory α✝
hd, hd2: Meas
tl: List Meas
h: cost_increasing F (hd :: hd2 :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length (hd2 :: tl)) (hj : j < List.length (hd2 :: tl)), i < j → Factory.lt F (List.get (hd2 :: tl) { val := i, isLt := hi }).cost (List.get (hd2 :: tl) { val := j, isLt := hj }).cost
hi: Nat.zero < List.length (hd :: hd2 :: tl)
j: ℕ
h_lt: Nat.zero < Nat.succ (Nat.succ j)
hj: Nat.succ (Nat.succ j) < List.length (hd :: hd2 :: tl)α✝: Type
F: Factory α✝
hd, hd2: Meas
tl: List Meas
h: cost_increasing F (hd :: hd2 :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length (hd2 :: tl)) (hj : j < List.length (hd2 :: tl)), i < j → Factory.lt F (List.get (hd2 :: tl) { val := i, isLt := hi }).cost (List.get (hd2 :: tl) { val := j, isLt := hj }).cost
hi: Nat.zero < List.length (hd :: hd2 :: tl)
j: ℕ
h_lt: Nat.zero < Nat.succ (Nat.succ j)
hj: Nat.succ (Nat.succ j) < Nat.succ (Nat.succ (List.length tl))
this: Factory.lt F hd.cost hd2.costα✝: Type
F: Factory α✝
hd, hd2: Meas
tl: List Meas
h: cost_increasing F (hd :: hd2 :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length (hd2 :: tl)) (hj : j < List.length (hd2 :: tl)), i < j → Factory.lt F (List.get (hd2 :: tl) { val := i, isLt := hi }).cost (List.get (hd2 :: tl) { val := j, isLt := hj }).cost
hi: Nat.zero < List.length (hd :: hd2 :: tl)
j: ℕ
h_lt: Nat.zero < Nat.succ (Nat.succ j)
hj: Nat.succ (Nat.succ j) < List.length (hd :: hd2 :: tl)α✝: Type
F: Factory α✝
hd, hd2: Meas
tl: List Meas
h: cost_increasing F (hd :: hd2 :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length (hd2 :: tl)) (hj : j < List.length (hd2 :: tl)), i < j → Factory.lt F (List.get (hd2 :: tl) { val := i, isLt := hi }).cost (List.get (hd2 :: tl) { val := j, isLt := hj }).cost
hi: Nat.zero < List.length (hd :: hd2 :: tl)
j: ℕ
h_lt: Nat.zero < Nat.succ (Nat.succ j)
hj: Nat.succ (Nat.succ j) < Nat.succ (Nat.succ (List.length tl))
this: Factory.lt F hd.cost hd2.costGoals accomplished! 🐙α✝: Type
F: Factory α✝
hd, hd2: Meas
tl: List Meas
h: cost_increasing F (hd :: hd2 :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length (hd2 :: tl)) (hj : j < List.length (hd2 :: tl)), i < j → Factory.lt F (List.get (hd2 :: tl) { val := i, isLt := hi }).cost (List.get (hd2 :: tl) { val := j, isLt := hj }).cost
hi: Nat.zero < List.length (hd :: hd2 :: tl)
j: ℕ
h_lt: Nat.zero < Nat.succ (Nat.succ j)
hj: Nat.succ (Nat.succ j) < Nat.succ (Nat.succ (List.length tl))
this: Factory.lt F hd.cost hd2.cost0 < List.length (hd2 :: tl)Goals accomplished! 🐙α✝: Type
F: Factory α✝
hd, hd2: Meas
tl: List Meas
h: cost_increasing F (hd :: hd2 :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length (hd2 :: tl)) (hj : j < List.length (hd2 :: tl)), i < j → Factory.lt F (List.get (hd2 :: tl) { val := i, isLt := hi }).cost (List.get (hd2 :: tl) { val := j, isLt := hj }).cost
hi: Nat.zero < List.length (hd :: hd2 :: tl)
j: ℕ
h_lt: Nat.zero < Nat.succ (Nat.succ j)
hj: Nat.succ (Nat.succ j) < Nat.succ (Nat.succ (List.length tl))
this: Factory.lt F hd.cost hd2.costGoals accomplished! 🐙α✝: Type
F: Factory α✝
hd, hd2: Meas
tl: List Meas
h: cost_increasing F (hd :: hd2 :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length (hd2 :: tl)) (hj : j < List.length (hd2 :: tl)), i < j → Factory.lt F (List.get (hd2 :: tl) { val := i, isLt := hi }).cost (List.get (hd2 :: tl) { val := j, isLt := hj }).cost
hi: Nat.zero < List.length (hd :: hd2 :: tl)
j: ℕ
h_lt: Nat.zero < Nat.succ (Nat.succ j)
hj: Nat.succ (Nat.succ j) < Nat.succ (Nat.succ (List.length tl))
this: Factory.lt F hd.cost hd2.costj + 1 < List.length (hd2 :: tl)α✝: Type
F: Factory α✝
hd, hd2: Meas
tl: List Meas
h: cost_increasing F (hd :: hd2 :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length (hd2 :: tl)) (hj : j < List.length (hd2 :: tl)), i < j → Factory.lt F (List.get (hd2 :: tl) { val := i, isLt := hi }).cost (List.get (hd2 :: tl) { val := j, isLt := hj }).cost
hi: Nat.zero < List.length (hd :: hd2 :: tl)
j: ℕ
h_lt: Nat.zero < Nat.succ (Nat.succ j)
hj: Nat.succ (Nat.succ j) < Nat.succ (Nat.succ (List.length tl))
this: Factory.lt F hd.cost hd2.costj + 1 < List.length (hd2 :: tl)α✝: Type
F: Factory α✝
hd, hd2: Meas
tl: List Meas
h: cost_increasing F (hd :: hd2 :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length (hd2 :: tl)) (hj : j < List.length (hd2 :: tl)), i < j → Factory.lt F (List.get (hd2 :: tl) { val := i, isLt := hi }).cost (List.get (hd2 :: tl) { val := j, isLt := hj }).cost
hi: Nat.zero < List.length (hd :: hd2 :: tl)
j: ℕ
h_lt: Nat.zero < Nat.succ (Nat.succ j)
hj: Nat.succ (Nat.succ j) < Nat.succ (Nat.succ (List.length tl))
this: Factory.lt F hd.cost hd2.costj + 1 < List.length (hd2 :: tl)α✝: Type
F: Factory α✝
hd, hd2: Meas
tl: List Meas
h: cost_increasing F (hd :: hd2 :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length (hd2 :: tl)) (hj : j < List.length (hd2 :: tl)), i < j → Factory.lt F (List.get (hd2 :: tl) { val := i, isLt := hi }).cost (List.get (hd2 :: tl) { val := j, isLt := hj }).cost
hi: Nat.zero < List.length (hd :: hd2 :: tl)
j: ℕ
h_lt: Nat.zero < Nat.succ (Nat.succ j)
hj: Nat.succ (Nat.succ j) < Nat.succ (Nat.succ (List.length tl))
this: Factory.lt F hd.cost hd2.costj + 1 < Nat.succ (List.length tl)α✝: Type
F: Factory α✝
hd, hd2: Meas
tl: List Meas
h: cost_increasing F (hd :: hd2 :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length (hd2 :: tl)) (hj : j < List.length (hd2 :: tl)), i < j → Factory.lt F (List.get (hd2 :: tl) { val := i, isLt := hi }).cost (List.get (hd2 :: tl) { val := j, isLt := hj }).cost
hi: Nat.zero < List.length (hd :: hd2 :: tl)
j: ℕ
h_lt: Nat.zero < Nat.succ (Nat.succ j)
hj: Nat.succ (Nat.succ j) < Nat.succ (Nat.succ (List.length tl))
this: Factory.lt F hd.cost hd2.costj + 1 < List.length (hd2 :: tl)Goals accomplished! 🐙Goals accomplished! 🐙α✝: Type
F: Factory α✝
hd, hd2: Meas
tl: List Meas
h: cost_increasing F (hd :: hd2 :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length (hd2 :: tl)) (hj : j < List.length (hd2 :: tl)), i < j → Factory.lt F (List.get (hd2 :: tl) { val := i, isLt := hi }).cost (List.get (hd2 :: tl) { val := j, isLt := hj }).cost
hi: Nat.zero < List.length (hd :: hd2 :: tl)
j: ℕ
h_lt: Nat.zero < Nat.succ (Nat.succ j)
hj: Nat.succ (Nat.succ j) < Nat.succ (Nat.succ (List.length tl))
this: Factory.lt F hd.cost hd2.costGoals accomplished! 🐙α✝: Type
F: Factory α✝
hd, hd2: Meas
tl: List Meas
h: cost_increasing F (hd :: hd2 :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length (hd2 :: tl)) (hj : j < List.length (hd2 :: tl)), i < j → Factory.lt F (List.get (hd2 :: tl) { val := i, isLt := hi }).cost (List.get (hd2 :: tl) { val := j, isLt := hj }).cost
hi: Nat.zero < List.length (hd :: hd2 :: tl)
j: ℕ
h_lt: Nat.zero < Nat.succ (Nat.succ j)
hj: Nat.succ (Nat.succ j) < Nat.succ (Nat.succ (List.length tl))
this: Factory.lt F hd.cost hd2.costGoals accomplished! 🐙α✝: Type
F: Factory α✝
hd, hd2: Meas
tl: List Meas
h: cost_increasing F (hd :: hd2 :: tl)
hi: Nat.zero < List.length (hd :: hd2 :: tl)
j: ℕ
h_lt: Nat.zero < Nat.succ (Nat.succ j)
hj: Nat.succ (Nat.succ j) < Nat.succ (Nat.succ (List.length tl))
this: Factory.lt F hd.cost hd2.cost
ih: Factory.lt F (List.get (hd2 :: tl) { val := 0, isLt := (_ : 0 < Nat.succ (List.length tl)) }).cost (List.get (hd2 :: tl) { val := j + 1, isLt := (_ : j + 1 < List.length (hd2 :: tl)) }).costα✝: Type
F: Factory α✝
hd, hd2: Meas
tl: List Meas
h: cost_increasing F (hd :: hd2 :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length (hd2 :: tl)) (hj : j < List.length (hd2 :: tl)), i < j → Factory.lt F (List.get (hd2 :: tl) { val := i, isLt := hi }).cost (List.get (hd2 :: tl) { val := j, isLt := hj }).cost
hi: Nat.zero < List.length (hd :: hd2 :: tl)
j: ℕ
h_lt: Nat.zero < Nat.succ (Nat.succ j)
hj: Nat.succ (Nat.succ j) < List.length (hd :: hd2 :: tl)α✝: Type
F: Factory α✝
hd, hd2: Meas
tl: List Meas
h: cost_increasing F (hd :: hd2 :: tl)
hi: Nat.zero < List.length (hd :: hd2 :: tl)
j: ℕ
h_lt: Nat.zero < Nat.succ (Nat.succ j)
hj: Nat.succ (Nat.succ j) < Nat.succ (Nat.succ (List.length tl))
this: Factory.lt F hd.cost hd2.cost
ih: Factory.lt F hd2.cost (List.get tl { val := j, isLt := (_ : j < List.length tl) }).costα✝: Type
F: Factory α✝
hd, hd2: Meas
tl: List Meas
h: cost_increasing F (hd :: hd2 :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length (hd2 :: tl)) (hj : j < List.length (hd2 :: tl)), i < j → Factory.lt F (List.get (hd2 :: tl) { val := i, isLt := hi }).cost (List.get (hd2 :: tl) { val := j, isLt := hj }).cost
hi: Nat.zero < List.length (hd :: hd2 :: tl)
j: ℕ
h_lt: Nat.zero < Nat.succ (Nat.succ j)
hj: Nat.succ (Nat.succ j) < List.length (hd :: hd2 :: tl)α✝: Type
F: Factory α✝
hd, hd2: Meas
tl: List Meas
h: cost_increasing F (hd :: hd2 :: tl)
hi: Nat.zero < List.length (hd :: hd2 :: tl)
j: ℕ
h_lt: Nat.zero < Nat.succ (Nat.succ j)
hj: Nat.succ (Nat.succ j) < Nat.succ (Nat.succ (List.length tl))
this: Factory.lt F hd.cost hd2.cost
ih: Factory.lt F hd2.cost (List.get tl { val := j, isLt := (_ : j < List.length tl) }).costα✝: Type
F: Factory α✝
hd, hd2: Meas
tl: List Meas
h: cost_increasing F (hd :: hd2 :: tl)
hi: Nat.zero < List.length (hd :: hd2 :: tl)
j: ℕ
h_lt: Nat.zero < Nat.succ (Nat.succ j)
hj: Nat.succ (Nat.succ j) < Nat.succ (Nat.succ (List.length tl))
this: Factory.lt F hd.cost hd2.cost
ih: Factory.lt F hd2.cost (List.get tl { val := j, isLt := (_ : j < List.length tl) }).cost
h₁Factory.lt F (List.get (hd :: hd2 :: tl) { val := Nat.zero, isLt := hi }).cost ?m.34280α✝: Type
F: Factory α✝
hd, hd2: Meas
tl: List Meas
h: cost_increasing F (hd :: hd2 :: tl)
hi: Nat.zero < List.length (hd :: hd2 :: tl)
j: ℕ
h_lt: Nat.zero < Nat.succ (Nat.succ j)
hj: Nat.succ (Nat.succ j) < Nat.succ (Nat.succ (List.length tl))
this: Factory.lt F hd.cost hd2.cost
ih: Factory.lt F hd2.cost (List.get tl { val := j, isLt := (_ : j < List.length tl) }).cost
h₂α✝: Type
F: Factory α✝
hd, hd2: Meas
tl: List Meas
h: cost_increasing F (hd :: hd2 :: tl)
hi: Nat.zero < List.length (hd :: hd2 :: tl)
j: ℕ
h_lt: Nat.zero < Nat.succ (Nat.succ j)
hj: Nat.succ (Nat.succ j) < Nat.succ (Nat.succ (List.length tl))
this: Factory.lt F hd.cost hd2.cost
ih: Factory.lt F hd2.cost (List.get tl { val := j, isLt := (_ : j < List.length tl) }).costα✝Goals accomplished! 🐙α✝: Type
F: Factory α✝
hd: Meas
tl: List Meas
ih: cost_increasing F tl → ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → Factory.lt F (List.get tl { val := i, isLt := hi }).cost (List.get tl { val := j, isLt := hj }).cost
h: cost_increasing F (hd :: tl)
i, j: ℕ
hi: i < List.length (hd :: tl)
hj: j < List.length (hd :: tl)
h_lt: i < jFactory.lt F (List.get (hd :: tl) { val := i, isLt := hi }).cost (List.get (hd :: tl) { val := j, isLt := hj }).costα✝: Type
F: Factory α✝
hd: Meas
tl: List Meas
h: cost_increasing F (hd :: tl)
j: ℕ
hj: j < List.length (hd :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → Factory.lt F (List.get tl { val := i, isLt := hi }).cost (List.get tl { val := j, isLt := hj }).cost
i: ℕ
hi: Nat.succ i < List.length (hd :: tl)
h_lt: Nat.succ i < jα✝: Type
F: Factory α✝
hd: Meas
tl: List Meas
h: cost_increasing F (hd :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → Factory.lt F (List.get tl { val := i, isLt := hi }).cost (List.get tl { val := j, isLt := hj }).cost
i: ℕ
hi: Nat.succ i < List.length (hd :: tl)
hj: Nat.zero < List.length (hd :: tl)
h_lt: Nat.succ i < Nat.zero
zeroα✝: Type
F: Factory α✝
hd: Meas
tl: List Meas
h: cost_increasing F (hd :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → Factory.lt F (List.get tl { val := i, isLt := hi }).cost (List.get tl { val := j, isLt := hj }).cost
i: ℕ
hi: Nat.succ i < List.length (hd :: tl)
n✝: ℕ
hj: Nat.succ n✝ < List.length (hd :: tl)
h_lt: Nat.succ i < Nat.succ n✝
succα✝: Type
F: Factory α✝
hd: Meas
tl: List Meas
h: cost_increasing F (hd :: tl)
j: ℕ
hj: j < List.length (hd :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → Factory.lt F (List.get tl { val := i, isLt := hi }).cost (List.get tl { val := j, isLt := hj }).cost
i: ℕ
hi: Nat.succ i < List.length (hd :: tl)
h_lt: Nat.succ i < jα✝: Type
F: Factory α✝
hd: Meas
tl: List Meas
h: cost_increasing F (hd :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → Factory.lt F (List.get tl { val := i, isLt := hi }).cost (List.get tl { val := j, isLt := hj }).cost
i: ℕ
hi: Nat.succ i < List.length (hd :: tl)
hj: Nat.zero < List.length (hd :: tl)
h_lt: Nat.succ i < Nat.zeroGoals accomplished! 🐙α✝: Type
F: Factory α✝
hd: Meas
tl: List Meas
h: cost_increasing F (hd :: tl)
j: ℕ
hj: j < List.length (hd :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → Factory.lt F (List.get tl { val := i, isLt := hi }).cost (List.get tl { val := j, isLt := hj }).cost
i: ℕ
hi: Nat.succ i < List.length (hd :: tl)
h_lt: Nat.succ i < jα✝: Type
F: Factory α✝
hd: Meas
tl: List Meas
h: cost_increasing F (hd :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → Factory.lt F (List.get tl { val := i, isLt := hi }).cost (List.get tl { val := j, isLt := hj }).cost
i: ℕ
hi: Nat.succ i < List.length (hd :: tl)
j: ℕ
hj: Nat.succ j < List.length (hd :: tl)
h_lt: Nat.succ i < Nat.succ jα✝: Type
F: Factory α✝
hd: Meas
tl: List Meas
h: cost_increasing F (hd :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → Factory.lt F (List.get tl { val := i, isLt := hi }).cost (List.get tl { val := j, isLt := hj }).cost
i: ℕ
hi: Nat.succ i < Nat.succ (List.length tl)
j: ℕ
hj: Nat.succ j < Nat.succ (List.length tl)
h_lt: Nat.succ i < Nat.succ jα✝: Type
F: Factory α✝
hd: Meas
tl: List Meas
h: cost_increasing F (hd :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → Factory.lt F (List.get tl { val := i, isLt := hi }).cost (List.get tl { val := j, isLt := hj }).cost
i: ℕ
hi: Nat.succ i < List.length (hd :: tl)
j: ℕ
hj: Nat.succ j < List.length (hd :: tl)
h_lt: Nat.succ i < Nat.succ jα✝: Type
F: Factory α✝
hd: Meas
tl: List Meas
h: cost_increasing F (hd :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → Factory.lt F (List.get tl { val := i, isLt := hi }).cost (List.get tl { val := j, isLt := hj }).cost
i: ℕ
hi: Nat.succ i < Nat.succ (List.length tl)
j: ℕ
hj: Nat.succ j < Nat.succ (List.length tl)
h_lt: Nat.succ i < Nat.succ jGoals accomplished! 🐙α✝: Type
F: Factory α✝
hd: Meas
tl: List Meas
h: cost_increasing F (hd :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → Factory.lt F (List.get tl { val := i, isLt := hi }).cost (List.get tl { val := j, isLt := hj }).cost
i: ℕ
hi: Nat.succ i < Nat.succ (List.length tl)
j: ℕ
hj: Nat.succ j < Nat.succ (List.length tl)
h_lt: Nat.succ i < Nat.succ ji < List.length tlGoals accomplished! 🐙α✝: Type
F: Factory α✝
hd: Meas
tl: List Meas
h: cost_increasing F (hd :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → Factory.lt F (List.get tl { val := i, isLt := hi }).cost (List.get tl { val := j, isLt := hj }).cost
i: ℕ
hi: Nat.succ i < Nat.succ (List.length tl)
j: ℕ
hj: Nat.succ j < Nat.succ (List.length tl)
h_lt: Nat.succ i < Nat.succ jGoals accomplished! 🐙α✝: Type
F: Factory α✝
hd: Meas
tl: List Meas
h: cost_increasing F (hd :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → Factory.lt F (List.get tl { val := i, isLt := hi }).cost (List.get tl { val := j, isLt := hj }).cost
i: ℕ
hi: Nat.succ i < Nat.succ (List.length tl)
j: ℕ
hj: Nat.succ j < Nat.succ (List.length tl)
h_lt: Nat.succ i < Nat.succ jj < List.length tlGoals accomplished! 🐙α✝: Type
F: Factory α✝
hd: Meas
tl: List Meas
h: cost_increasing F (hd :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → Factory.lt F (List.get tl { val := i, isLt := hi }).cost (List.get tl { val := j, isLt := hj }).cost
i: ℕ
hi: Nat.succ i < Nat.succ (List.length tl)
j: ℕ
hj: Nat.succ j < Nat.succ (List.length tl)
h_lt: Nat.succ i < Nat.succ jGoals accomplished! 🐙α✝: Type
F: Factory α✝
hd: Meas
tl: List Meas
h: cost_increasing F (hd :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → Factory.lt F (List.get tl { val := i, isLt := hi }).cost (List.get tl { val := j, isLt := hj }).cost
i: ℕ
hi: Nat.succ i < Nat.succ (List.length tl)
j: ℕ
hj: Nat.succ j < Nat.succ (List.length tl)
h_lt: Nat.succ i < Nat.succ ji < jGoals accomplished! 🐙α✝: Type
F: Factory α✝
hd: Meas
tl: List Meas
h: cost_increasing F (hd :: tl)
i: ℕ
hi: Nat.succ i < Nat.succ (List.length tl)
j: ℕ
hj: Nat.succ j < Nat.succ (List.length tl)
h_lt: Nat.succ i < Nat.succ j
ih: Factory.lt F (List.get tl { val := i, isLt := (_ : i < List.length tl) }).cost (List.get tl { val := j, isLt := (_ : j < List.length tl) }).costα✝: Type
F: Factory α✝
hd: Meas
tl: List Meas
h: cost_increasing F (hd :: tl)
ih: ∀ (i j : ℕ) (hi : i < List.length tl) (hj : j < List.length tl), i < j → Factory.lt F (List.get tl { val := i, isLt := hi }).cost (List.get tl { val := j, isLt := hj }).cost
i: ℕ
hi: Nat.succ i < List.length (hd :: tl)
j: ℕ
hj: Nat.succ j < List.length (hd :: tl)
h_lt: Nat.succ i < Nat.succ jlemmaGoals accomplished! 🐙cost_increasing_non_strict_head (cost_increasing_non_strict_head: ∀ {α : Type} {F : Factory α} {x y : Meas} {xs : List Meas}, cost_increasing_non_strict F (x :: y :: xs) → Factory.le F x.cost y.cost = trueh : cost_increasing_non_stricth: cost_increasing_non_strict F (x :: y :: xs)F (F: ?m.42130x ::x: ?m.42140y ::y: ?m.42150xs)) :xs: ?m.42160F.leF: ?m.42130x.x: ?m.42140costcost: {α : Type} → Meas → αy.y: ?m.42150cost :=cost: {α : Type} → Meas → αGoals accomplished! 🐙Factory.le F x.cost y.cost = trueFactory.le F x.cost y.cost = trueGoals accomplished! 🐙0 < List.length (x :: y :: xs)Goals accomplished! 🐙Factory.le F x.cost y.cost = trueGoals accomplished! 🐙Goals accomplished! 🐙lemmaGoals accomplished! 🐙cost_increasing_non_strict_rest (cost_increasing_non_strict_rest: ∀ {α : Type} {F : Factory α} {x : Meas} {xs : List Meas}, cost_increasing_non_strict F (x :: xs) → cost_increasing_non_strict F xsh : cost_increasing_non_stricth: cost_increasing_non_strict F (x :: xs)F (F: ?m.42513x ::x: ?m.42523xs)) : cost_increasing_non_strictxs: ?m.42531FF: ?m.42513xs :=xs: ?m.42531Goals accomplished! 🐙α✝: Type
F: Factory α✝
x: Meas
xs: List Meas
h: cost_increasing_non_strict F (x :: xs)
i: ℕ
hi✝: i < List.length xs
hj✝: i + 1 < List.length xsα✝: Type
F: Factory α✝
x: Meas
xs: List Meas
h: cost_increasing_non_strict F (x :: xs)
i: ℕ
hi✝: i < List.length xs
hj✝: i + 1 < List.length xsGoals accomplished! 🐙α✝: Type
F: Factory α✝
x: Meas
xs: List Meas
h: cost_increasing_non_strict F (x :: xs)
i: ℕ
hi✝: i < List.length xs
hj✝: i + 1 < List.length xsi + 1 < List.length (x :: xs)α✝: Type
F: Factory α✝
x: Meas
xs: List Meas
h: cost_increasing_non_strict F (x :: xs)
i: ℕ
hi✝: i < List.length xs
hj✝: i + 1 < List.length xsi + 1 < List.length (x :: xs)α✝: Type
F: Factory α✝
x: Meas
xs: List Meas
h: cost_increasing_non_strict F (x :: xs)
i: ℕ
hi✝: i < List.length xs
hj✝: i + 1 < List.length xsi + 1 < List.length (x :: xs)α✝: Type
F: Factory α✝
x: Meas
xs: List Meas
h: cost_increasing_non_strict F (x :: xs)
i: ℕ
hi✝: i < List.length xs
hj✝: i + 1 < List.length xsi + 1 ≤ List.length xsα✝: Type
F: Factory α✝
x: Meas
xs: List Meas
h: cost_increasing_non_strict F (x :: xs)
i: ℕ
hi✝: i < List.length xs
hj✝: i + 1 < List.length xsi + 1 ≤ List.length xsα✝: Type
F: Factory α✝
x: Meas
xs: List Meas
h: cost_increasing_non_strict F (x :: xs)
i: ℕ
hi✝: i < List.length xs
hj✝: i + 1 < List.length xsi + 1 < List.length (x :: xs)Goals accomplished! 🐙Goals accomplished! 🐙α✝: Type
F: Factory α✝
x: Meas
xs: List Meas
h: cost_increasing_non_strict F (x :: xs)
i: ℕ
hi✝: i < List.length xs
hj✝: i + 1 < List.length xsGoals accomplished! 🐙α✝: Type
F: Factory α✝
x: Meas
xs: List Meas
h: cost_increasing_non_strict F (x :: xs)
i: ℕ
hi✝: i < List.length xs
hj✝: i + 1 < List.length xsi + 1 + 1 < List.length (x :: xs)α✝: Type
F: Factory α✝
x: Meas
xs: List Meas
h: cost_increasing_non_strict F (x :: xs)
i: ℕ
hi✝: i < List.length xs
hj✝: i + 1 < List.length xsi + 1 + 1 < List.length (x :: xs)α✝: Type
F: Factory α✝
x: Meas
xs: List Meas
h: cost_increasing_non_strict F (x :: xs)
i: ℕ
hi✝: i < List.length xs
hj✝: i + 1 < List.length xsi + 1 + 1 < List.length (x :: xs)α✝: Type
F: Factory α✝
x: Meas
xs: List Meas
h: cost_increasing_non_strict F (x :: xs)
i: ℕ
hi✝: i < List.length xs
hj✝: i + 1 < List.length xsi + 2 ≤ List.length xsα✝: Type
F: Factory α✝
x: Meas
xs: List Meas
h: cost_increasing_non_strict F (x :: xs)
i: ℕ
hi✝: i < List.length xs
hj✝: i + 1 < List.length xsi + 2 ≤ List.length xsα✝: Type
F: Factory α✝
x: Meas
xs: List Meas
h: cost_increasing_non_strict F (x :: xs)
i: ℕ
hi✝: i < List.length xs
hj✝: i + 1 < List.length xsi + 1 + 1 < List.length (x :: xs)Goals accomplished! 🐙Goals accomplished! 🐙lemmaGoals accomplished! 🐙cost_increasing_non_strict_empty : cost_increasing_non_strictcost_increasing_non_strict_empty: ∀ {α : Type} {F : Factory α}, cost_increasing_non_strict F []FF: ?m.47567[] :=[]: List ?m.47574Goals accomplished! 🐙lemmaGoals accomplished! 🐙cost_increasing_non_strict_one : cost_increasing_non_strictcost_increasing_non_strict_one: ∀ {α : Type} {F : Factory α} {x : Meas}, cost_increasing_non_strict F [x]F [F: ?m.47687x] :=x: ?m.47697Goals accomplished! 🐙lemmaGoals accomplished! 🐙cost_increasing_non_strict_cons (cost_increasing_non_strict_cons: ∀ {α : Type} {F : Factory α} (x y : Meas) (xs : List Meas), Factory.le F x.cost y.cost = true → cost_increasing_non_strict F (y :: xs) → cost_increasing_non_strict F (x :: y :: xs)xx: Measy : Meas) (y: Measxs : List Meas) (xs: List Meash_cost :h_cost: ?m.48193FF: ?m.48180.leF.le x.cost y.cost: Sort ?u.48175F.le x.cost y.cost: Sort ?u.48175xx: Meas.F.le x.cost y.cost: Sort ?u.48175costcost: {α : Type} → Meas → αF.le x.cost y.cost: Sort ?u.48175yy: Meas.F.le x.cost y.cost: Sort ?u.48175cost) (cost: {α : Type} → Meas → αh : cost_increasing_non_stricth: cost_increasing_non_strict F (y :: xs)F (F: ?m.48180y ::y: Measxs)) : cost_increasing_non_strictxs: List MeasF (F: ?m.48180x ::x: Measy ::y: Measxs) :=xs: List MeasGoals accomplished! 🐙α✝: Type
F: Factory α✝
x, y: Meas
xs: List Meas
h_cost: Factory.le F x.cost y.cost = true
h: cost_increasing_non_strict F (y :: xs)cost_increasing_non_strict F (x :: y :: xs)α✝: Type
F: Factory α✝
x, y: Meas
xs: List Meas
h_cost: Factory.le F x.cost y.cost = true
h: cost_increasing_non_strict F (y :: xs)
i: ℕ
hi✝: i < List.length (x :: y :: xs)
hj✝: i + 1 < List.length (x :: y :: xs)α✝: Type
F: Factory α✝
x, y: Meas
xs: List Meas
h_cost: Factory.le F x.cost y.cost = true
h: cost_increasing_non_strict F (y :: xs)cost_increasing_non_strict F (x :: y :: xs)α✝: Type
F: Factory α✝
x, y: Meas
xs: List Meas
h_cost: Factory.le F x.cost y.cost = true
h: cost_increasing_non_strict F (y :: xs)
hi✝: Nat.zero < List.length (x :: y :: xs)
hj✝: Nat.zero + 1 < List.length (x :: y :: xs)
zeroα✝: Type
F: Factory α✝
x, y: Meas
xs: List Meas
h_cost: Factory.le F x.cost y.cost = true
h: cost_increasing_non_strict F (y :: xs)
n✝: ℕ
hi✝: Nat.succ n✝ < List.length (x :: y :: xs)
hj✝: Nat.succ n✝ + 1 < List.length (x :: y :: xs)
succα✝: Type
F: Factory α✝
x, y: Meas
xs: List Meas
h_cost: Factory.le F x.cost y.cost = true
h: cost_increasing_non_strict F (y :: xs)cost_increasing_non_strict F (x :: y :: xs)α✝: Type
F: Factory α✝
x, y: Meas
xs: List Meas
h_cost: Factory.le F x.cost y.cost = true
h: cost_increasing_non_strict F (y :: xs)
hi✝: Nat.zero < List.length (x :: y :: xs)
hj✝: Nat.zero + 1 < List.length (x :: y :: xs)Goals accomplished! 🐙α✝: Type
F: Factory α✝
x, y: Meas
xs: List Meas
h_cost: Factory.le F x.cost y.cost = true
h: cost_increasing_non_strict F (y :: xs)cost_increasing_non_strict F (x :: y :: xs)α✝: Type
F: Factory α✝
x, y: Meas
xs: List Meas
h_cost: Factory.le F x.cost y.cost = true
h: cost_increasing_non_strict F (y :: xs)
i: ℕ
hi✝: Nat.succ i < List.length (x :: y :: xs)
hj✝: Nat.succ i + 1 < List.length (x :: y :: xs)α✝: Type
F: Factory α✝
x, y: Meas
xs: List Meas
h_cost: Factory.le F x.cost y.cost = true
h: cost_increasing_non_strict F (y :: xs)
i: ℕ
hi✝: Nat.succ i < List.length (x :: y :: xs)
hj✝: Nat.succ i + 1 < List.length (x :: y :: xs)Goals accomplished! 🐙α✝: Type
F: Factory α✝
x, y: Meas
xs: List Meas
h_cost: Factory.le F x.cost y.cost = true
h: cost_increasing_non_strict F (y :: xs)
i: ℕ
hi✝: Nat.succ i < List.length (x :: y :: xs)
hj✝: Nat.succ i + 1 < List.length (x :: y :: xs)i < List.length (y :: xs)α✝: Type
F: Factory α✝
x, y: Meas
xs: List Meas
h_cost: Factory.le F x.cost y.cost = true
h: cost_increasing_non_strict F (y :: xs)
i: ℕ
hi✝: Nat.succ i < List.length (x :: y :: xs)
hj✝: Nat.succ i + 1 < List.length (x :: y :: xs)i < List.length (y :: xs)α✝: Type
F: Factory α✝
x, y: Meas
xs: List Meas
h_cost: Factory.le F x.cost y.cost = true
h: cost_increasing_non_strict F (y :: xs)
i: ℕ
hi✝: Nat.succ i < List.length (x :: y :: xs)
hj✝: Nat.succ i + 1 < List.length (x :: y :: xs)i < List.length (y :: xs)α✝: Type
F: Factory α✝
x, y: Meas
xs: List Meas
h_cost: Factory.le F x.cost y.cost = true
h: cost_increasing_non_strict F (y :: xs)
i: ℕ
hi✝: i ≤ List.length xs
hj✝: i + 1 ≤ List.length xsi ≤ List.length xsα✝: Type
F: Factory α✝
x, y: Meas
xs: List Meas
h_cost: Factory.le F x.cost y.cost = true
h: cost_increasing_non_strict F (y :: xs)
i: ℕ
hi✝: Nat.succ i < List.length (x :: y :: xs)
hj✝: Nat.succ i + 1 < List.length (x :: y :: xs)i < List.length (y :: xs)Goals accomplished! 🐙Goals accomplished! 🐙α✝: Type
F: Factory α✝
x, y: Meas
xs: List Meas
h_cost: Factory.le F x.cost y.cost = true
h: cost_increasing_non_strict F (y :: xs)
i: ℕ
hi✝: Nat.succ i < List.length (x :: y :: xs)
hj✝: Nat.succ i + 1 < List.length (x :: y :: xs)Goals accomplished! 🐙α✝: Type
F: Factory α✝
x, y: Meas
xs: List Meas
h_cost: Factory.le F x.cost y.cost = true
h: cost_increasing_non_strict F (y :: xs)
i: ℕ
hi✝: Nat.succ i < List.length (x :: y :: xs)
hj✝: Nat.succ i + 1 < List.length (x :: y :: xs)i + 1 < List.length (y :: xs)α✝: Type
F: Factory α✝
x, y: Meas
xs: List Meas
h_cost: Factory.le F x.cost y.cost = true
h: cost_increasing_non_strict F (y :: xs)
i: ℕ
hi✝: Nat.succ i < List.length (x :: y :: xs)
hj✝: Nat.succ i + 1 < List.length (x :: y :: xs)i + 1 < List.length (y :: xs)α✝: Type
F: Factory α✝
x, y: Meas
xs: List Meas
h_cost: Factory.le F x.cost y.cost = true
h: cost_increasing_non_strict F (y :: xs)
i: ℕ
hi✝: Nat.succ i < List.length (x :: y :: xs)
hj✝: Nat.succ i + 1 < List.length (x :: y :: xs)i + 1 < List.length (y :: xs)α✝: Type
F: Factory α✝
x, y: Meas
xs: List Meas
h_cost: Factory.le F x.cost y.cost = true
h: cost_increasing_non_strict F (y :: xs)
i: ℕ
hi✝: i ≤ List.length xs
hj✝: i + 1 ≤ List.length xsi + 1 ≤ List.length xsα✝: Type
F: Factory α✝
x, y: Meas
xs: List Meas
h_cost: Factory.le F x.cost y.cost = true
h: cost_increasing_non_strict F (y :: xs)
i: ℕ
hi✝: Nat.succ i < List.length (x :: y :: xs)
hj✝: Nat.succ i + 1 < List.length (x :: y :: xs)i + 1 < List.length (y :: xs)Goals accomplished! 🐙Goals accomplished! 🐙lemmaGoals accomplished! 🐙last_decreasing_concat (last_decreasing_concat: ∀ {α : Type} {ms : List Meas} (F : Factory α) (m : Meas), last_decreasing ms → last_decreasing (List.map (fun m' => Meas.concat F m m') ms)F : FactoryF: Factory αα) (α: ?m.50891m : Meas) (m: Meash : last_decreasingh: last_decreasing msms) : last_decreasing (ms: ?m.50901ms.map (funms: ?m.50901m' => Meas.concatm': ?m.50924FF: Factory αmm: Measm')) :=m': ?m.50924Goals accomplished! 🐙last_decreasing (List.map (fun m' => Meas.concat F m m') ms)
nillast_decreasing (List.map (fun m' => Meas.concat F m m') [])α: Type
F: Factory α
m, head✝: Meas
tail✝: List Meas
tail_ih✝: last_decreasing tail✝ → last_decreasing (List.map (fun m' => Meas.concat F m m') tail✝)
h: last_decreasing (head✝ :: tail✝)
conslast_decreasing (List.map (fun m' => Meas.concat F m m') (head✝ :: tail✝))last_decreasing (List.map (fun m' => Meas.concat F m m') ms)last_decreasing (List.map (fun m' => Meas.concat F m m') [])Goals accomplished! 🐙last_decreasing (List.map (fun m' => Meas.concat F m m') ms)α: Type
F: Factory α
m, hd: Meas
tl: List Meas
ih: last_decreasing tl → last_decreasing (List.map (fun m' => Meas.concat F m m') tl)
h: last_decreasing (hd :: tl)last_decreasing (List.map (fun m' => Meas.concat F m m') (hd :: tl))α: Type
F: Factory α
m, hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
ih: last_decreasing (List.map (fun m' => Meas.concat F m m') tl)last_decreasing (List.map (fun m' => Meas.concat F m m') (hd :: tl))α: Type
F: Factory α
m, hd: Meas
tl: List Meas
ih: last_decreasing tl → last_decreasing (List.map (fun m' => Meas.concat F m m') tl)
h: last_decreasing (hd :: tl)last_decreasing (List.map (fun m' => Meas.concat F m m') (hd :: tl))α: Type
F: Factory α
m, hd: Meas
h: last_decreasing [hd]
ih: last_decreasing (List.map (fun m' => Meas.concat F m m') [])
nillast_decreasing (List.map (fun m' => Meas.concat F m m') [hd])α: Type
F: Factory α
m, hd, head✝: Meas
tail✝: List Meas
h: last_decreasing (hd :: head✝ :: tail✝)
ih: last_decreasing (List.map (fun m' => Meas.concat F m m') (head✝ :: tail✝))
conslast_decreasing (List.map (fun m' => Meas.concat F m m') (hd :: head✝ :: tail✝))α: Type
F: Factory α
m, hd: Meas
tl: List Meas
ih: last_decreasing tl → last_decreasing (List.map (fun m' => Meas.concat F m m') tl)
h: last_decreasing (hd :: tl)last_decreasing (List.map (fun m' => Meas.concat F m m') (hd :: tl))α: Type
F: Factory α
m, hd: Meas
h: last_decreasing [hd]
ih: last_decreasing (List.map (fun m' => Meas.concat F m m') [])last_decreasing (List.map (fun m' => Meas.concat F m m') [hd])Goals accomplished! 🐙α: Type
F: Factory α
m, hd: Meas
tl: List Meas
ih: last_decreasing tl → last_decreasing (List.map (fun m' => Meas.concat F m m') tl)
h: last_decreasing (hd :: tl)last_decreasing (List.map (fun m' => Meas.concat F m m') (hd :: tl))α: Type
F: Factory α
m, hd, head✝: Meas
tail✝: List Meas
h: last_decreasing (hd :: head✝ :: tail✝)
ih: last_decreasing (List.map (fun m' => Meas.concat F m m') (head✝ :: tail✝))last_decreasing (List.map (fun m' => Meas.concat F m m') (hd :: head✝ :: tail✝))α: Type
F: Factory α
m, hd, head✝: Meas
tail✝: List Meas
h: last_decreasing (hd :: head✝ :: tail✝)
ih: last_decreasing (List.map (fun m' => Meas.concat F m m') (head✝ :: tail✝))
h_last((fun m' => Meas.concat F m m') hd).last > ((fun m' => Meas.concat F m m') head✝).lastα: Type
F: Factory α
m, hd, head✝: Meas
tail✝: List Meas
h: last_decreasing (hd :: head✝ :: tail✝)
ih: last_decreasing (List.map (fun m' => Meas.concat F m m') (head✝ :: tail✝))
hlast_decreasing ((fun m' => Meas.concat F m m') head✝ :: List.map (fun m' => Meas.concat F m m') tail✝)α: Type
F: Factory α
m, hd, head✝: Meas
tail✝: List Meas
h: last_decreasing (hd :: head✝ :: tail✝)
ih: last_decreasing (List.map (fun m' => Meas.concat F m m') (head✝ :: tail✝))last_decreasing (List.map (fun m' => Meas.concat F m m') (hd :: head✝ :: tail✝))α: Type
F: Factory α
m, hd, head✝: Meas
tail✝: List Meas
h: last_decreasing (hd :: head✝ :: tail✝)
ih: last_decreasing (List.map (fun m' => Meas.concat F m m') (head✝ :: tail✝))((fun m' => Meas.concat F m m') hd).last > ((fun m' => Meas.concat F m m') head✝).lastα: Type
F: Factory α
m, hd, head✝: Meas
tail✝: List Meas
ih: last_decreasing (List.map (fun m' => Meas.concat F m m') (head✝ :: tail✝))
h: hd.last > head✝.last((fun m' => Meas.concat F m m') hd).last > ((fun m' => Meas.concat F m m') head✝).lastα: Type
F: Factory α
m, hd, head✝: Meas
tail✝: List Meas
h: last_decreasing (hd :: head✝ :: tail✝)
ih: last_decreasing (List.map (fun m' => Meas.concat F m m') (head✝ :: tail✝))((fun m' => Meas.concat F m m') hd).last > ((fun m' => Meas.concat F m m') head✝).lastGoals accomplished! 🐙α: Type
F: Factory α
m, hd, head✝: Meas
tail✝: List Meas
h: last_decreasing (hd :: head✝ :: tail✝)
ih: last_decreasing (List.map (fun m' => Meas.concat F m m') (head✝ :: tail✝))last_decreasing (List.map (fun m' => Meas.concat F m m') (hd :: head✝ :: tail✝))α: Type
F: Factory α
m, hd, head✝: Meas
tail✝: List Meas
h: last_decreasing (hd :: head✝ :: tail✝)
ih: last_decreasing (List.map (fun m' => Meas.concat F m m') (head✝ :: tail✝))last_decreasing ((fun m' => Meas.concat F m m') head✝ :: List.map (fun m' => Meas.concat F m m') tail✝)lemmaGoals accomplished! 🐙cost_increasing_non_strict_concat (cost_increasing_non_strict_concat: ∀ {α : Type} {F : Factory α} {ms : List Meas} (m : Meas), cost_increasing F ms → cost_increasing_non_strict F (List.map (fun m' => Meas.concat F m m') ms)m : Meas) (m: Meash : cost_increasingh: cost_increasing F msFF: ?m.51395ms) : cost_increasing_non_strictms: ?m.51405F (F: ?m.51395ms.map (funms: ?m.51405m' => Meas.concatm': ?m.51426FF: ?m.51395mm: Measm')) :=m': ?m.51426Goals accomplished! 🐙cost_increasing_non_strict F (List.map (fun m' => Meas.concat F m m') ms)
nilcost_increasing_non_strict F (List.map (fun m' => Meas.concat F m m') [])α✝: Type
F: Factory α✝
m, head✝: Meas
tail✝: List Meas
tail_ih✝: cost_increasing F tail✝ → cost_increasing_non_strict F (List.map (fun m' => Meas.concat F m m') tail✝)
h: cost_increasing F (head✝ :: tail✝)
conscost_increasing_non_strict F (List.map (fun m' => Meas.concat F m m') (head✝ :: tail✝))cost_increasing_non_strict F (List.map (fun m' => Meas.concat F m m') ms)cost_increasing_non_strict F (List.map (fun m' => Meas.concat F m m') [])Goals accomplished! 🐙cost_increasing_non_strict F (List.map (fun m' => Meas.concat F m m') ms)α✝: Type
F: Factory α✝
m, hd: Meas
tl: List Meas
ih: cost_increasing F tl → cost_increasing_non_strict F (List.map (fun m' => Meas.concat F m m') tl)
h: cost_increasing F (hd :: tl)cost_increasing_non_strict F (List.map (fun m' => Meas.concat F m m') (hd :: tl))α✝: Type
F: Factory α✝
m, hd: Meas
tl: List Meas
h: cost_increasing F (hd :: tl)
ih: cost_increasing_non_strict F (List.map (fun m' => Meas.concat F m m') tl)cost_increasing_non_strict F (List.map (fun m' => Meas.concat F m m') (hd :: tl))α✝: Type
F: Factory α✝
m, hd: Meas
tl: List Meas
ih: cost_increasing F tl → cost_increasing_non_strict F (List.map (fun m' => Meas.concat F m m') tl)
h: cost_increasing F (hd :: tl)cost_increasing_non_strict F (List.map (fun m' => Meas.concat F m m') (hd :: tl))α✝: Type
F: Factory α✝
m, hd: Meas
h: cost_increasing F [hd]
ih: cost_increasing_non_strict F (List.map (fun m' => Meas.concat F m m') [])
nilcost_increasing_non_strict F (List.map (fun m' => Meas.concat F m m') [hd])α✝: Type
F: Factory α✝
m, hd, head✝: Meas
tail✝: List Meas
h: cost_increasing F (hd :: head✝ :: tail✝)
ih: cost_increasing_non_strict F (List.map (fun m' => Meas.concat F m m') (head✝ :: tail✝))
conscost_increasing_non_strict F (List.map (fun m' => Meas.concat F m m') (hd :: head✝ :: tail✝))α✝: Type
F: Factory α✝
m, hd: Meas
tl: List Meas
ih: cost_increasing F tl → cost_increasing_non_strict F (List.map (fun m' => Meas.concat F m m') tl)
h: cost_increasing F (hd :: tl)cost_increasing_non_strict F (List.map (fun m' => Meas.concat F m m') (hd :: tl))α✝: Type
F: Factory α✝
m, hd: Meas
h: cost_increasing F [hd]
ih: cost_increasing_non_strict F (List.map (fun m' => Meas.concat F m m') [])cost_increasing_non_strict F (List.map (fun m' => Meas.concat F m m') [hd])Goals accomplished! 🐙α✝: Type
F: Factory α✝
m, hd: Meas
tl: List Meas
ih: cost_increasing F tl → cost_increasing_non_strict F (List.map (fun m' => Meas.concat F m m') tl)
h: cost_increasing F (hd :: tl)cost_increasing_non_strict F (List.map (fun m' => Meas.concat F m m') (hd :: tl))α✝: Type
F: Factory α✝
m, hd, head✝: Meas
tail✝: List Meas
h: cost_increasing F (hd :: head✝ :: tail✝)
ih: cost_increasing_non_strict F (List.map (fun m' => Meas.concat F m m') (head✝ :: tail✝))cost_increasing_non_strict F (List.map (fun m' => Meas.concat F m m') (hd :: head✝ :: tail✝))α✝: Type
F: Factory α✝
m, hd, head✝: Meas
tail✝: List Meas
h: cost_increasing F (hd :: head✝ :: tail✝)
ih: cost_increasing_non_strict F (List.map (fun m' => Meas.concat F m m') (head✝ :: tail✝))
h_costFactory.le F ((fun m' => Meas.concat F m m') hd).cost ((fun m' => Meas.concat F m m') head✝).cost = trueα✝: Type
F: Factory α✝
m, hd, head✝: Meas
tail✝: List Meas
h: cost_increasing F (hd :: head✝ :: tail✝)
ih: cost_increasing_non_strict F (List.map (fun m' => Meas.concat F m m') (head✝ :: tail✝))
hcost_increasing_non_strict F ((fun m' => Meas.concat F m m') head✝ :: List.map (fun m' => Meas.concat F m m') tail✝)α✝: Type
F: Factory α✝
m, hd, head✝: Meas
tail✝: List Meas
h: cost_increasing F (hd :: head✝ :: tail✝)
ih: cost_increasing_non_strict F (List.map (fun m' => Meas.concat F m m') (head✝ :: tail✝))cost_increasing_non_strict F (List.map (fun m' => Meas.concat F m m') (hd :: head✝ :: tail✝))α✝: Type
F: Factory α✝
m, hd, head✝: Meas
tail✝: List Meas
h: cost_increasing F (hd :: head✝ :: tail✝)
ih: cost_increasing_non_strict F (List.map (fun m' => Meas.concat F m m') (head✝ :: tail✝))Factory.le F ((fun m' => Meas.concat F m m') hd).cost ((fun m' => Meas.concat F m m') head✝).cost = trueα✝: Type
F: Factory α✝
m, hd, head✝: Meas
tail✝: List Meas
ih: cost_increasing_non_strict F (List.map (fun m' => Meas.concat F m m') (head✝ :: tail✝))
h: Factory.lt F hd.cost head✝.costFactory.le F ((fun m' => Meas.concat F m m') hd).cost ((fun m' => Meas.concat F m m') head✝).cost = trueα✝: Type
F: Factory α✝
m, hd, head✝: Meas
tail✝: List Meas
h: cost_increasing F (hd :: head✝ :: tail✝)
ih: cost_increasing_non_strict F (List.map (fun m' => Meas.concat F m m') (head✝ :: tail✝))Factory.le F ((fun m' => Meas.concat F m m') hd).cost ((fun m' => Meas.concat F m m') head✝).cost = trueα✝: Type
F: Factory α✝
m, hd, head✝: Meas
tail✝: List Meas
ih: cost_increasing_non_strict F (List.map (fun m' => Meas.concat F m m') (head✝ :: tail✝))
h: Factory.lt F hd.cost head✝.costFactory.le F (Factory.concat F m.cost hd.cost) (Factory.concat F m.cost head✝.cost) = trueα✝: Type
F: Factory α✝
m, hd, head✝: Meas
tail✝: List Meas
h: cost_increasing F (hd :: head✝ :: tail✝)
ih: cost_increasing_non_strict F (List.map (fun m' => Meas.concat F m m') (head✝ :: tail✝))Factory.le F ((fun m' => Meas.concat F m m') hd).cost ((fun m' => Meas.concat F m m') head✝).cost = trueα✝: Type
F: Factory α✝
m, hd, head✝: Meas
tail✝: List Meas
ih: cost_increasing_non_strict F (List.map (fun m' => Meas.concat F m m') (head✝ :: tail✝))
h: Factory.lt F hd.cost head✝.cost
aFactory.le F m.cost m.cost = trueα✝: Type
F: Factory α✝
m, hd, head✝: Meas
tail✝: List Meas
ih: cost_increasing_non_strict F (List.map (fun m' => Meas.concat F m m') (head✝ :: tail✝))
h: Factory.lt F hd.cost head✝.cost
aFactory.le F hd.cost head✝.cost = trueα✝: Type
F: Factory α✝
m, hd, head✝: Meas
tail✝: List Meas
h: cost_increasing F (hd :: head✝ :: tail✝)
ih: cost_increasing_non_strict F (List.map (fun m' => Meas.concat F m m') (head✝ :: tail✝))Factory.le F ((fun m' => Meas.concat F m m') hd).cost ((fun m' => Meas.concat F m m') head✝).cost = trueα✝: Type
F: Factory α✝
m, hd, head✝: Meas
tail✝: List Meas
ih: cost_increasing_non_strict F (List.map (fun m' => Meas.concat F m m') (head✝ :: tail✝))
h: Factory.lt F hd.cost head✝.cost
aFactory.le F m.cost m.cost = trueα✝: Type
F: Factory α✝
m, hd, head✝: Meas
tail✝: List Meas
ih: cost_increasing_non_strict F (List.map (fun m' => Meas.concat F m m') (head✝ :: tail✝))
h: Factory.lt F hd.cost head✝.cost
aFactory.le F hd.cost head✝.cost = trueGoals accomplished! 🐙α✝: Type
F: Factory α✝
m, hd, head✝: Meas
tail✝: List Meas
h: cost_increasing F (hd :: head✝ :: tail✝)
ih: cost_increasing_non_strict F (List.map (fun m' => Meas.concat F m m') (head✝ :: tail✝))Factory.le F ((fun m' => Meas.concat F m m') hd).cost ((fun m' => Meas.concat F m m') head✝).cost = trueα✝: Type
F: Factory α✝
m, hd, head✝: Meas
tail✝: List Meas
ih: cost_increasing_non_strict F (List.map (fun m' => Meas.concat F m m') (head✝ :: tail✝))
h: Factory.lt F hd.cost head✝.cost
aFactory.le F hd.cost head✝.cost = trueα✝: Type
F: Factory α✝
m, hd, head✝: Meas
tail✝: List Meas
ih: cost_increasing_non_strict F (List.map (fun m' => Meas.concat F m m') (head✝ :: tail✝))
h: Factory.lt F hd.cost head✝.cost
a.h₁Factory.lt F hd.cost head✝.costα✝: Type
F: Factory α✝
m, hd, head✝: Meas
tail✝: List Meas
ih: cost_increasing_non_strict F (List.map (fun m' => Meas.concat F m m') (head✝ :: tail✝))
h: Factory.lt F hd.cost head✝.cost
aFactory.le F hd.cost head✝.cost = trueGoals accomplished! 🐙α✝: Type
F: Factory α✝
m, hd, head✝: Meas
tail✝: List Meas
h: cost_increasing F (hd :: head✝ :: tail✝)
ih: cost_increasing_non_strict F (List.map (fun m' => Meas.concat F m m') (head✝ :: tail✝))cost_increasing_non_strict F (List.map (fun m' => Meas.concat F m m') (hd :: head✝ :: tail✝))α✝: Type
F: Factory α✝
m, hd, head✝: Meas
tail✝: List Meas
h: cost_increasing F (hd :: head✝ :: tail✝)
ih: cost_increasing_non_strict F (List.map (fun m' => Meas.concat F m m') (head✝ :: tail✝))cost_increasing_non_strict F ((fun m' => Meas.concat F m m') head✝ :: List.map (fun m' => Meas.concat F m m') tail✝)lemmaGoals accomplished! 🐙last_decreasing_bound (last_decreasing_bound: ∀ {α : Type} {ms : List Meas}, last_decreasing ms → ∀ (i : ℕ) (hi : List.length ms - 1 - i < List.length ms), i < List.length ms → (List.get ms { val := List.length ms - 1 - i, isLt := hi }).last ≥ ih : last_decreasingh: last_decreasing msms) (ms: ?m.51925i :i: ℕℕ) (ℕ: Typehi :hi: List.length ms - 1 - i < List.length msms.length -ms: ?m.519251 -1: ?m.51947i <i: ℕms.length) (ms: ?m.51925h_bound :h_bound: i < List.length msi <i: ℕms.length) : (ms: ?m.51925ms.ms: ?m.51925get ⟨get: {α : Type ?u.52057} → (as : List α) → Fin (List.length as) → αms.length -ms: ?m.519251 -1: ?m.52078i,i: ℕhi⟩).last ≥hi: List.length ms - 1 - i < List.length msi :=i: ℕGoals accomplished! 🐙α✝: Type
ms: List Meas
h: last_decreasing ms
i: ℕ
hi: List.length ms - 1 - i < List.length ms
h_bound: i < List.length ms(List.get ms { val := List.length ms - 1 - i, isLt := hi }).last ≥ iα✝: Type
ms: List Meas
h: last_decreasing ms
hi: List.length ms - 1 - Nat.zero < List.length ms
h_bound: Nat.zero < List.length ms
zeroα✝: Type
ms: List Meas
h: last_decreasing ms
n✝: ℕ
n_ih✝: ∀ (hi : List.length ms - 1 - n✝ < List.length ms), n✝ < List.length ms → (List.get ms { val := List.length ms - 1 - n✝, isLt := hi }).last ≥ n✝
hi: List.length ms - 1 - Nat.succ n✝ < List.length ms
h_bound: Nat.succ n✝ < List.length ms
succα✝: Type
ms: List Meas
h: last_decreasing ms
i: ℕ
hi: List.length ms - 1 - i < List.length ms
h_bound: i < List.length ms(List.get ms { val := List.length ms - 1 - i, isLt := hi }).last ≥ iα✝: Type
ms: List Meas
h: last_decreasing ms
hi: List.length ms - 1 - Nat.zero < List.length ms
h_bound: Nat.zero < List.length msGoals accomplished! 🐙α✝: Type
ms: List Meas
h: last_decreasing ms
i: ℕ
hi: List.length ms - 1 - i < List.length ms
h_bound: i < List.length ms(List.get ms { val := List.length ms - 1 - i, isLt := hi }).last ≥ iα✝: Type
ms: List Meas
h: last_decreasing ms
i: ℕ
ih: ∀ (hi : List.length ms - 1 - i < List.length ms), i < List.length ms → (List.get ms { val := List.length ms - 1 - i, isLt := hi }).last ≥ i
hi: List.length ms - 1 - Nat.succ i < List.length ms
h_bound: Nat.succ i < List.length msα✝: Type
ms: List Meas
h: last_decreasing ms
i: ℕ
ih: ∀ (hi : List.length ms - 1 - i < List.length ms), i < List.length ms → (List.get ms { val := List.length ms - 1 - i, isLt := hi }).last ≥ i
hi: List.length ms - 1 - Nat.succ i < List.length ms
h_bound: Nat.succ i < List.length msα✝: Type
ms: List Meas
h: last_decreasing ms
i: ℕ
ih: ∀ (hi : List.length ms - 1 - i < List.length ms), i < List.length ms → (List.get ms { val := List.length ms - 1 - i, isLt := hi }).last ≥ i
hi: List.length ms - 1 - Nat.succ i < List.length ms
h_bound: Nat.succ i < List.length msα✝: Type
i: ℕ
h: last_decreasing []
ih: ∀ (hi : List.length [] - 1 - i < List.length []), i < List.length [] → (List.get [] { val := List.length [] - 1 - i, isLt := hi }).last ≥ i
hi: List.length [] - 1 - Nat.succ i < List.length []
h_bound: Nat.succ i < List.length []
nilα✝: Type
i: ℕ
head✝: Meas
tail✝: List Meas
h: last_decreasing (head✝ :: tail✝)
ih: ∀ (hi : List.length (head✝ :: tail✝) - 1 - i < List.length (head✝ :: tail✝)), i < List.length (head✝ :: tail✝) → (List.get (head✝ :: tail✝) { val := List.length (head✝ :: tail✝) - 1 - i, isLt := hi }).last ≥ i
hi: List.length (head✝ :: tail✝) - 1 - Nat.succ i < List.length (head✝ :: tail✝)
h_bound: Nat.succ i < List.length (head✝ :: tail✝)
consα✝: Type
ms: List Meas
h: last_decreasing ms
i: ℕ
ih: ∀ (hi : List.length ms - 1 - i < List.length ms), i < List.length ms → (List.get ms { val := List.length ms - 1 - i, isLt := hi }).last ≥ i
hi: List.length ms - 1 - Nat.succ i < List.length ms
h_bound: Nat.succ i < List.length msα✝: Type
i: ℕ
h: last_decreasing []
ih: ∀ (hi : List.length [] - 1 - i < List.length []), i < List.length [] → (List.get [] { val := List.length [] - 1 - i, isLt := hi }).last ≥ i
hi: List.length [] - 1 - Nat.succ i < List.length []
h_bound: Nat.succ i < List.length []Goals accomplished! 🐙α✝: Type
ms: List Meas
h: last_decreasing ms
i: ℕ
ih: ∀ (hi : List.length ms - 1 - i < List.length ms), i < List.length ms → (List.get ms { val := List.length ms - 1 - i, isLt := hi }).last ≥ i
hi: List.length ms - 1 - Nat.succ i < List.length ms
h_bound: Nat.succ i < List.length msα✝: Type
i: ℕ
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
ih: ∀ (hi : List.length (hd :: tl) - 1 - i < List.length (hd :: tl)), i < List.length (hd :: tl) → (List.get (hd :: tl) { val := List.length (hd :: tl) - 1 - i, isLt := hi }).last ≥ i
hi: List.length (hd :: tl) - 1 - Nat.succ i < List.length (hd :: tl)
h_bound: Nat.succ i < List.length (hd :: tl)α✝: Type
i: ℕ
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
ih: ∀ (hi : List.length (hd :: tl) - 1 - i < List.length (hd :: tl)), i < List.length (hd :: tl) → (List.get (hd :: tl) { val := List.length (hd :: tl) - 1 - i, isLt := hi }).last ≥ i
hi: List.length (hd :: tl) - 1 - Nat.succ i < List.length (hd :: tl)
h_bound: Nat.succ i < Nat.succ (List.length tl)α✝: Type
i: ℕ
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
ih: ∀ (hi : List.length (hd :: tl) - 1 - i < List.length (hd :: tl)), i < List.length (hd :: tl) → (List.get (hd :: tl) { val := List.length (hd :: tl) - 1 - i, isLt := hi }).last ≥ i
hi: List.length (hd :: tl) - 1 - Nat.succ i < List.length (hd :: tl)
h_bound: Nat.succ i < List.length (hd :: tl)α✝: Type
i: ℕ
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
ih: ∀ (hi : List.length (hd :: tl) - 1 - i < List.length (hd :: tl)), i < List.length (hd :: tl) → (List.get (hd :: tl) { val := List.length (hd :: tl) - 1 - i, isLt := hi }).last ≥ i
hi: List.length (hd :: tl) - 1 - Nat.succ i < List.length (hd :: tl)
h_bound: i < List.length tlα✝: Type
i: ℕ
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
ih: ∀ (hi : List.length (hd :: tl) - 1 - i < List.length (hd :: tl)), i < List.length (hd :: tl) → (List.get (hd :: tl) { val := List.length (hd :: tl) - 1 - i, isLt := hi }).last ≥ i
hi: List.length (hd :: tl) - 1 - Nat.succ i < List.length (hd :: tl)
h_bound: Nat.succ i < List.length (hd :: tl)α✝: Type
i: ℕ
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
ih: ∀ (hi : List.length (hd :: tl) - 1 - i < List.length (hd :: tl)), i < List.length (hd :: tl) → (List.get (hd :: tl) { val := List.length (hd :: tl) - 1 - i, isLt := hi }).last ≥ i
hi: List.length (hd :: tl) - 1 - Nat.succ i < List.length (hd :: tl)
h_bound: i < List.length tlGoals accomplished! 🐙α✝: Type
i: ℕ
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
ih: ∀ (hi : List.length (hd :: tl) - 1 - i < List.length (hd :: tl)), i < List.length (hd :: tl) → (List.get (hd :: tl) { val := List.length (hd :: tl) - 1 - i, isLt := hi }).last ≥ i
hi: List.length (hd :: tl) - 1 - Nat.succ i < List.length (hd :: tl)
h_bound: i < List.length tlList.length (hd :: tl) - 1 - i < List.length (hd :: tl)Goals accomplished! 🐙α✝: Type
i: ℕ
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
ih: ∀ (hi : List.length (hd :: tl) - 1 - i < List.length (hd :: tl)), i < List.length (hd :: tl) → (List.get (hd :: tl) { val := List.length (hd :: tl) - 1 - i, isLt := hi }).last ≥ i
hi: List.length (hd :: tl) - 1 - Nat.succ i < List.length (hd :: tl)
h_bound: i < List.length tlGoals accomplished! 🐙α✝: Type
i: ℕ
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
ih: ∀ (hi : List.length (hd :: tl) - 1 - i < List.length (hd :: tl)), i < List.length (hd :: tl) → (List.get (hd :: tl) { val := List.length (hd :: tl) - 1 - i, isLt := hi }).last ≥ i
hi: List.length (hd :: tl) - 1 - Nat.succ i < List.length (hd :: tl)
h_bound: i < List.length tli < List.length (hd :: tl)α✝: Type
i: ℕ
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
ih: ∀ (hi : List.length (hd :: tl) - 1 - i < List.length (hd :: tl)), i < List.length (hd :: tl) → (List.get (hd :: tl) { val := List.length (hd :: tl) - 1 - i, isLt := hi }).last ≥ i
hi: List.length (hd :: tl) - 1 - Nat.succ i < List.length (hd :: tl)
h_bound: i < List.length tli < List.length (hd :: tl)α✝: Type
i: ℕ
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
ih: ∀ (hi : List.length (hd :: tl) - 1 - i < List.length (hd :: tl)), i < List.length (hd :: tl) → (List.get (hd :: tl) { val := List.length (hd :: tl) - 1 - i, isLt := hi }).last ≥ i
hi: List.length (hd :: tl) - 1 - Nat.succ i < List.length (hd :: tl)
h_bound: i < List.length tli < List.length (hd :: tl)α✝: Type
i: ℕ
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
ih: ∀ (hi : List.length (hd :: tl) - 1 - i < List.length (hd :: tl)), i < List.length (hd :: tl) → (List.get (hd :: tl) { val := List.length (hd :: tl) - 1 - i, isLt := hi }).last ≥ i
hi: List.length (hd :: tl) - 1 - Nat.succ i < List.length (hd :: tl)
h_bound: i < List.length tli ≤ List.length tlα✝: Type
i: ℕ
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
ih: ∀ (hi : List.length (hd :: tl) - 1 - i < List.length (hd :: tl)), i < List.length (hd :: tl) → (List.get (hd :: tl) { val := List.length (hd :: tl) - 1 - i, isLt := hi }).last ≥ i
hi: List.length (hd :: tl) - 1 - Nat.succ i < List.length (hd :: tl)
h_bound: i < List.length tli < List.length (hd :: tl)Goals accomplished! 🐙Goals accomplished! 🐙α✝: Type
i: ℕ
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
hi: List.length (hd :: tl) - 1 - Nat.succ i < List.length (hd :: tl)
h_bound: i < List.length tl
ih: (List.get (hd :: tl) { val := List.length (hd :: tl) - 1 - i, isLt := (_ : Nat.succ (List.length tl) - Nat.succ 0 - i < Nat.succ (List.length tl)) }).last ≥ iα✝: Type
i: ℕ
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
ih: ∀ (hi : List.length (hd :: tl) - 1 - i < List.length (hd :: tl)), i < List.length (hd :: tl) → (List.get (hd :: tl) { val := List.length (hd :: tl) - 1 - i, isLt := hi }).last ≥ i
hi: List.length (hd :: tl) - 1 - Nat.succ i < List.length (hd :: tl)
h_bound: Nat.succ i < List.length (hd :: tl)α✝: Type
i: ℕ
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
hi: List.length (hd :: tl) - 1 - Nat.succ i < List.length (hd :: tl)
h_bound: i < List.length tl
ih: i ≤ (List.get (hd :: tl) { val := List.length tl - i, isLt := (_ : List.length tl - i < List.length (hd :: tl)) }).lastα✝: Type
i: ℕ
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
ih: ∀ (hi : List.length (hd :: tl) - 1 - i < List.length (hd :: tl)), i < List.length (hd :: tl) → (List.get (hd :: tl) { val := List.length (hd :: tl) - 1 - i, isLt := hi }).last ≥ i
hi: List.length (hd :: tl) - 1 - Nat.succ i < List.length (hd :: tl)
h_bound: Nat.succ i < List.length (hd :: tl)α✝: Type
i: ℕ
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
hi: List.length (hd :: tl) - 1 - Nat.succ i < List.length (hd :: tl)
h_bound: i < List.length tl
ih: i ≤ (List.get (hd :: tl) { val := List.length tl - i, isLt := (_ : List.length tl - i < List.length (hd :: tl)) }).lastGoals accomplished! 🐙α✝: Type
i: ℕ
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
hi: List.length (hd :: tl) - 1 - Nat.succ i < List.length (hd :: tl)
h_bound: i < List.length tl
ih: i ≤ (List.get (hd :: tl) { val := List.length tl - i, isLt := (_ : List.length tl - i < List.length (hd :: tl)) }).lastList.length (hd :: tl) - 1 - i < List.length (hd :: tl)Goals accomplished! 🐙α✝: Type
i: ℕ
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
hi: List.length (hd :: tl) - 1 - Nat.succ i < List.length (hd :: tl)
h_bound: i < List.length tl
ih: i ≤ (List.get (hd :: tl) { val := List.length tl - i, isLt := (_ : List.length tl - i < List.length (hd :: tl)) }).lastGoals accomplished! 🐙α✝: Type
i: ℕ
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
hi: List.length (hd :: tl) - 1 - Nat.succ i < List.length (hd :: tl)
h_bound: i < List.length tl
ih: i ≤ (List.get (hd :: tl) { val := List.length tl - i, isLt := (_ : List.length tl - i < List.length (hd :: tl)) }).lastList.length (hd :: tl) - 1 - Nat.succ i < List.length (hd :: tl) - 1 - iα✝: Type
i: ℕ
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
hi: List.length (hd :: tl) - 1 - Nat.succ i < List.length (hd :: tl)
h_bound: i < List.length tl
ih: i ≤ (List.get (hd :: tl) { val := List.length tl - i, isLt := (_ : List.length tl - i < List.length (hd :: tl)) }).lastList.length (hd :: tl) - 1 - Nat.succ i < List.length (hd :: tl) - 1 - iα✝: Type
i: ℕ
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
hi: List.length (hd :: tl) - 1 - Nat.succ i < List.length (hd :: tl)
h_bound: i < List.length tl
ih: i ≤ (List.get (hd :: tl) { val := List.length tl - i, isLt := (_ : List.length tl - i < List.length (hd :: tl)) }).lastList.length (hd :: tl) - 1 - Nat.succ i < List.length (hd :: tl) - 1 - iα✝: Type
i: ℕ
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
hi: List.length (hd :: tl) - 1 - Nat.succ i < List.length (hd :: tl)
h_bound: i < List.length tl
ih: i ≤ (List.get (hd :: tl) { val := List.length tl - i, isLt := (_ : List.length tl - i < List.length (hd :: tl)) }).lastList.length tl - Nat.succ i < List.length tl - iα✝: Type
i: ℕ
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
hi: List.length (hd :: tl) - 1 - Nat.succ i < List.length (hd :: tl)
h_bound: i < List.length tl
ih: i ≤ (List.get (hd :: tl) { val := List.length tl - i, isLt := (_ : List.length tl - i < List.length (hd :: tl)) }).lastList.length (hd :: tl) - 1 - Nat.succ i < List.length (hd :: tl) - 1 - iα✝: Type
i: ℕ
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
hi: List.length (hd :: tl) - 1 - Nat.succ i < List.length (hd :: tl)
h_bound: i < List.length tl
ih: i ≤ (List.get (hd :: tl) { val := List.length tl - i, isLt := (_ : List.length tl - i < List.length (hd :: tl)) }).last
n: ℕ
h_gen: List.length tl = nα✝: Type
i: ℕ
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
hi: List.length (hd :: tl) - 1 - Nat.succ i < List.length (hd :: tl)
h_bound: i < List.length tl
ih: i ≤ (List.get (hd :: tl) { val := List.length tl - i, isLt := (_ : List.length tl - i < List.length (hd :: tl)) }).lastList.length (hd :: tl) - 1 - Nat.succ i < List.length (hd :: tl) - 1 - iα✝: Type
i: ℕ
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
hi: List.length (hd :: tl) - 1 - Nat.succ i < List.length (hd :: tl)
ih: i ≤ (List.get (hd :: tl) { val := List.length tl - i, isLt := (_ : List.length tl - i < List.length (hd :: tl)) }).last
n: ℕ
h_gen: List.length tl = n
h_bound: i < nα✝: Type
i: ℕ
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
hi: List.length (hd :: tl) - 1 - Nat.succ i < List.length (hd :: tl)
h_bound: i < List.length tl
ih: i ≤ (List.get (hd :: tl) { val := List.length tl - i, isLt := (_ : List.length tl - i < List.length (hd :: tl)) }).lastList.length (hd :: tl) - 1 - Nat.succ i < List.length (hd :: tl) - 1 - iα✝: Type
i: ℕ
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
hi: List.length (hd :: tl) - 1 - Nat.succ i < List.length (hd :: tl)
h_bound: i < List.length tl
ih: i ≤ (List.get (hd :: tl) { val := List.length tl - i, isLt := (_ : List.length tl - i < List.length (hd :: tl)) }).lastList.length (hd :: tl) - 1 - Nat.succ i < List.length (hd :: tl) - 1 - iα✝: Type
i: ℕ
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
hi: List.length (hd :: tl) - 1 - Nat.succ i < List.length (hd :: tl)
h_bound: i < List.length tl
ih: i ≤ (List.get (hd :: tl) { val := List.length tl - i, isLt := (_ : List.length tl - i < List.length (hd :: tl)) }).lastList.length (hd :: tl) - 1 - Nat.succ i < List.length (hd :: tl) - 1 - iGoals accomplished! 🐙α✝: Type
i: ℕ
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
hi: List.length (hd :: tl) - 1 - Nat.succ i < List.length (hd :: tl)
h_bound: i < List.length tl
ih: i ≤ (List.get (hd :: tl) { val := List.length tl - i, isLt := (_ : List.length tl - i < List.length (hd :: tl)) }).lastList.length (hd :: tl) - 1 - Nat.succ i < List.length (hd :: tl) - 1 - iGoals accomplished! 🐙Goals accomplished! 🐙α✝: Type
i: ℕ
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
hi: List.length (hd :: tl) - 1 - Nat.succ i < List.length (hd :: tl)
h_bound: i < List.length tl
ih: i ≤ (List.get (hd :: tl) { val := List.length tl - i, isLt := (_ : List.length tl - i < List.length (hd :: tl)) }).last
this: (List.get (hd :: tl) { val := List.length (hd :: tl) - 1 - Nat.succ i, isLt := hi }).last > (List.get (hd :: tl) { val := List.length (hd :: tl) - 1 - i, isLt := (_ : Nat.succ (List.length tl) - Nat.succ 0 - i < Nat.succ (List.length tl)) }).lastα✝: Type
i: ℕ
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
ih: ∀ (hi : List.length (hd :: tl) - 1 - i < List.length (hd :: tl)), i < List.length (hd :: tl) → (List.get (hd :: tl) { val := List.length (hd :: tl) - 1 - i, isLt := hi }).last ≥ i
hi: List.length (hd :: tl) - 1 - Nat.succ i < List.length (hd :: tl)
h_bound: Nat.succ i < List.length (hd :: tl)α✝: Type
i: ℕ
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
hi: List.length (hd :: tl) - 1 - Nat.succ i < List.length (hd :: tl)
h_bound: i < List.length tl
ih: i ≤ (List.get (hd :: tl) { val := List.length tl - i, isLt := (_ : List.length tl - i < List.length (hd :: tl)) }).last
this: (List.get (hd :: tl) { val := List.length tl - i, isLt := (_ : List.length tl - i < List.length (hd :: tl)) }).last < (List.get (hd :: tl) { val := List.length tl - Nat.succ i, isLt := (_ : List.length tl - Nat.succ i < List.length (hd :: tl)) }).lastα✝: Type
i: ℕ
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
ih: ∀ (hi : List.length (hd :: tl) - 1 - i < List.length (hd :: tl)), i < List.length (hd :: tl) → (List.get (hd :: tl) { val := List.length (hd :: tl) - 1 - i, isLt := hi }).last ≥ i
hi: List.length (hd :: tl) - 1 - Nat.succ i < List.length (hd :: tl)
h_bound: Nat.succ i < List.length (hd :: tl)α✝: Type
i: ℕ
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
hi: List.length (hd :: tl) - 1 - Nat.succ i < List.length (hd :: tl)
h_bound: i < List.length tl
ih: i ≤ (List.get (hd :: tl) { val := List.length tl - i, isLt := (_ : List.length tl - i < List.length (hd :: tl)) }).last
this: (List.get (hd :: tl) { val := List.length tl - i, isLt := (_ : List.length tl - i < List.length (hd :: tl)) }).last < (List.get (hd :: tl) { val := List.length tl - Nat.succ i, isLt := (_ : List.length tl - Nat.succ i < List.length (hd :: tl)) }).lastGoals accomplished! 🐙α✝: Type
i: ℕ
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
hi: List.length (hd :: tl) - 1 - Nat.succ i < List.length (hd :: tl)
h_bound: i < List.length tl
ih: i ≤ (List.get (hd :: tl) { val := List.length tl - i, isLt := (_ : List.length tl - i < List.length (hd :: tl)) }).last
this: (List.get (hd :: tl) { val := List.length tl - i, isLt := (_ : List.length tl - i < List.length (hd :: tl)) }).last < (List.get (hd :: tl) { val := List.length tl - Nat.succ i, isLt := (_ : List.length tl - Nat.succ i < List.length (hd :: tl)) }).lastα✝: Type
i: ℕ
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
hi: List.length (hd :: tl) - 1 - Nat.succ i < List.length (hd :: tl)
h_bound: i < List.length tl
ih: i ≤ (List.get (hd :: tl) { val := List.length tl - i, isLt := (_ : List.length tl - i < List.length (hd :: tl)) }).last
this: (List.get (hd :: tl) { val := List.length tl - i, isLt := (_ : List.length tl - i < List.length (hd :: tl)) }).last < (List.get (hd :: tl) { val := List.length tl - Nat.succ i, isLt := (_ : List.length tl - Nat.succ i < List.length (hd :: tl)) }).lastα✝: Type
i: ℕ
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
hi: List.length (hd :: tl) - 1 - Nat.succ i < List.length (hd :: tl)
h_bound: i < List.length tl
ih: i ≤ (List.get (hd :: tl) { val := List.length tl - i, isLt := (_ : List.length tl - i < List.length (hd :: tl)) }).last
this: (List.get (hd :: tl) { val := List.length tl - i, isLt := (_ : List.length tl - i < List.length (hd :: tl)) }).last < (List.get (hd :: tl) { val := List.length tl - Nat.succ i, isLt := (_ : List.length tl - Nat.succ i < List.length (hd :: tl)) }).lastα✝: Type
i: ℕ
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
hi: List.length (hd :: tl) - 1 - Nat.succ i < List.length (hd :: tl)
h_bound: i < List.length tl
ih: i ≤ (List.get (hd :: tl) { val := List.length tl - i, isLt := (_ : List.length tl - i < List.length (hd :: tl)) }).last
this: (List.get (hd :: tl) { val := List.length tl - i, isLt := (_ : List.length tl - i < List.length (hd :: tl)) }).last < (List.get (hd :: tl) { val := List.length tl - Nat.succ i, isLt := (_ : List.length tl - Nat.succ i < List.length (hd :: tl)) }).lasti < (List.get (hd :: tl) { val := List.length tl - Nat.succ i, isLt := (_ : List.length tl - Nat.succ i < List.length (hd :: tl)) }).lastα✝: Type
i: ℕ
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
hi: List.length (hd :: tl) - 1 - Nat.succ i < List.length (hd :: tl)
h_bound: i < List.length tl
ih: i ≤ (List.get (hd :: tl) { val := List.length tl - i, isLt := (_ : List.length tl - i < List.length (hd :: tl)) }).last
this: (List.get (hd :: tl) { val := List.length tl - i, isLt := (_ : List.length tl - i < List.length (hd :: tl)) }).last < (List.get (hd :: tl) { val := List.length tl - Nat.succ i, isLt := (_ : List.length tl - Nat.succ i < List.length (hd :: tl)) }).lastGoals accomplished! 🐙Goals accomplished! 🐙α✝: Type
i: ℕ
hd: Meas
tl: List Meas
h: last_decreasing (hd :: tl)
ih: ∀ (hi : List.length (hd :: tl) - 1 - i < List.length (hd :: tl)), i < List.length (hd :: tl) → (List.get (hd :: tl) { val := List.length (hd :: tl) - 1 - i, isLt := hi }).last ≥ i
hi: List.length (hd :: tl) - 1 - Nat.succ i < List.length (hd :: tl)
h_bound: Nat.succ i < List.length (hd :: tl)Goals accomplished! 🐙