Built with doc-gen4, running Lean4. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑Ctrl+↓to navigate, Ctrl+🖱️to focus. On Mac, use Cmdinstead of Ctrl.
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.
-/

lemma 
last_decreasing_head: ∀ {α : Type} {x y : Meas} {xs : List Meas}, last_decreasing (x :: y :: xs)x.last > y.last
last_decreasing_head
(
h: last_decreasing (x :: y :: xs)
h
:
last_decreasing: {α : Type} → List MeasProp
last_decreasing
(
x: ?m.7
x
::
y: ?m.17
y
::
xs: ?m.27
xs
)) :
x: ?m.7
x
.
last: {α : Type} → Meas
last
>
y: ?m.17
y
.
last: {α : Type} → Meas
last
:=

Goals accomplished! 🐙
α✝: Type

x, y: Meas

xs: List Meas

h: last_decreasing (x :: y :: xs)


x.last > y.last
α✝: Type

x, y: Meas

xs: List Meas

h: last_decreasing (x :: y :: xs)


x.last > y.last

Goals accomplished! 🐙
α✝: Type

x, y: Meas

xs: List Meas

h: last_decreasing (x :: y :: xs)


0 < List.length (x :: y :: xs)

Goals accomplished! 🐙
α✝: Type

x, y: Meas

xs: List Meas

h: last_decreasing (x :: y :: xs)


x.last > y.last

Goals accomplished! 🐙
α✝: Type

x, y: Meas

xs: List Meas

h: last_decreasing (x :: y :: xs)


0 + 1 < List.length (x :: y :: xs)

Goals accomplished! 🐙

Goals accomplished! 🐙
lemma
last_decreasing_rest: ∀ {α : Type} {x : Meas} {xs : List Meas}, last_decreasing (x :: xs)last_decreasing xs
last_decreasing_rest
(h :
last_decreasing: {α : Type} → List MeasProp
last_decreasing
(
x: ?m.371
x
::
xs: ?m.379
xs
)) :
last_decreasing: {α : Type} → List MeasProp
last_decreasing
xs: ?m.379
xs
:=

Goals accomplished! 🐙
α✝: Type

x: Meas

xs: List Meas

h: last_decreasing (x :: xs)


α✝: Type

x: Meas

xs: List Meas

h: last_decreasing (x :: xs)

i:

hi✝: i < List.length xs

hj✝: i + 1 < List.length xs


(List.get xs { val := i, isLt := hi✝ }).last > (List.get xs { val := i + 1, isLt := hj✝ }).last
α✝: Type

x: Meas

xs: List Meas

h: last_decreasing (x :: xs)


α✝: Type

x: Meas

xs: List Meas

h: last_decreasing (x :: xs)

i:

hi✝: i < List.length xs

hj✝: i + 1 < List.length xs


(List.get xs { val := i, isLt := hi✝ }).last > (List.get xs { val := i + 1, isLt := hj✝ }).last

Goals accomplished! 🐙
α✝: Type

x: Meas

xs: List Meas

h: last_decreasing (x :: xs)

i:

hi✝: i < List.length xs

hj✝: i + 1 < List.length xs


i + 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 xs


i + 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 xs


i + 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 xs


α✝: 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 xs


i + 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 xs


(List.get xs { val := i, isLt := hi✝ }).last > (List.get xs { val := i + 1, isLt := hj✝ }).last

Goals accomplished! 🐙
α✝: Type

x: Meas

xs: List Meas

h: last_decreasing (x :: xs)

i:

hi✝: i < List.length xs

hj✝: i + 1 < List.length xs


i + 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 xs


i + 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 xs


i + 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 xs


α✝: 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 xs


i + 1 + 1 < List.length (x :: xs)

Goals accomplished! 🐙

Goals accomplished! 🐙

Goals accomplished! 🐙
lemma
last_decreasing_empty: ∀ {α : Type}, last_decreasing []
last_decreasing_empty
: @
last_decreasing: {α : Type} → List MeasProp
last_decreasing
α: ?m.5411
α
[]: List ?m.5415
[]
:=

Goals accomplished! 🐙
α: Type

i✝:

hi✝: i✝ < List.length []

hj✝: i✝ + 1 < List.length []


(List.get [] { val := i✝, isLt := hi✝ }).last > (List.get [] { val := i✝ + 1, isLt := hj✝ }).last

Goals accomplished! 🐙
lemma
last_decreasing_one: ∀ {α : Type} {x : Meas}, last_decreasing [x]
last_decreasing_one
:
last_decreasing: {α : Type} → List MeasProp
last_decreasing
[
x: ?m.5527
x
] :=

Goals accomplished! 🐙
α✝: Type

x: Meas


α✝: Type

x: Meas

i✝:

hi✝: i✝ < List.length [x]

hj✝: i✝ + 1 < List.length [x]


(List.get [x] { val := i✝, isLt := hi✝ }).last > (List.get [x] { val := i✝ + 1, isLt := hj✝ }).last
α✝: Type

x: Meas



Goals accomplished! 🐙
lemma
last_decreasing_cons: ∀ {α : Type} (x y : Meas) (xs : List Meas), x.last > y.lastlast_decreasing (y :: xs)last_decreasing (x :: y :: xs)
last_decreasing_cons
{
α: Type
α
:
Type: Type 1
Type
} (
x: Meas
x
y: Meas
y
: @
Meas: {α : Type} → Type
Meas
α: Type
α
) (
xs: List Meas
xs
:
List: Type ?u.5999 → Type ?u.5999
List
Meas: {α : Type} → Type
Meas
) (
h_last: x.last > y.last
h_last
:
x: Meas
x
.
last: {α : Type} → Meas
last
>
y: Meas
y
.
last: {α : Type} → Meas
last
) (h :
last_decreasing: {α : Type} → List MeasProp
last_decreasing
(
y: Meas
y
::
xs: List Meas
xs
)) :
last_decreasing: {α : Type} → List MeasProp
last_decreasing
(
x: Meas
x
::
y: Meas
y
::
xs: List Meas
xs
) :=

Goals accomplished! 🐙
α: Type

x, y: Meas

xs: List Meas

h_last: x.last > y.last

h: last_decreasing (y :: xs)


α: Type

x, y: Meas

xs: List Meas

h_last: x.last > y.last

h: last_decreasing (y :: xs)

i:

hi✝: i < List.length (x :: y :: xs)

hj✝: i + 1 < List.length (x :: y :: xs)


(List.get (x :: y :: xs) { val := i, isLt := hi✝ }).last > (List.get (x :: y :: xs) { val := i + 1, isLt := hj✝ }).last
α: Type

x, y: Meas

xs: List Meas

h_last: x.last > y.last

h: last_decreasing (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
(List.get (x :: y :: xs) { val := Nat.zero, isLt := hi✝ }).last > (List.get (x :: y :: xs) { val := Nat.zero + 1, isLt := hj✝ }).last
α: 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)


succ
(List.get (x :: y :: xs) { val := Nat.succ n✝, isLt := hi✝ }).last > (List.get (x :: y :: xs) { val := Nat.succ n✝ + 1, isLt := hj✝ }).last
α: Type

x, y: Meas

xs: List Meas

h_last: x.last > y.last

h: last_decreasing (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)


(List.get (x :: y :: xs) { val := Nat.zero, isLt := hi✝ }).last > (List.get (x :: y :: xs) { val := Nat.zero + 1, isLt := hj✝ }).last

Goals accomplished! 🐙
α: Type

x, y: Meas

xs: List Meas

h_last: x.last > y.last

h: last_decreasing (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)


(List.get (x :: y :: xs) { val := Nat.succ i, isLt := hi✝ }).last > (List.get (x :: y :: xs) { val := Nat.succ i + 1, isLt := hj✝ }).last
α: 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)


(List.get (x :: y :: xs) { val := Nat.succ i, isLt := hi✝ }).last > (List.get (x :: y :: xs) { val := Nat.succ i + 1, isLt := hj✝ }).last

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 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! 🐙
α: 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)


(List.get (x :: y :: xs) { val := Nat.succ i, isLt := hi✝ }).last > (List.get (x :: y :: xs) { val := Nat.succ i + 1, isLt := hj✝ }).last

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 + 1 < 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 + 1 < 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 + 1 < 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 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 + 1 < List.length (y :: xs)

Goals accomplished! 🐙

Goals accomplished! 🐙

Goals accomplished! 🐙
lemma
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 }).last
last_decreasing_strong
(h :
last_decreasing: {α : Type} → List MeasProp
last_decreasing
ms: ?m.9152
ms
) : ∀ (
i:
i
j:
j
:
: Type
) (
h_i: i < List.length ms
h_i
:
i:
i
<
ms: ?m.9152
ms
.
length: {α : Type ?u.9166} → List α
length
) (
h_j: j < List.length ms
h_j
:
j:
j
<
ms: ?m.9152
ms
.
length: {α : Type ?u.9178} → List α
length
),
i:
i
<
j:
j
→ (
ms: ?m.9152
ms
.
get: {α : Type ?u.9192} → (as : List α) → Fin (List.length as)α
get
i:
i
,

Goals accomplished! 🐙
ms: List Meas

h: last_decreasing ms

i, j:

h_i: i < List.length ms

h_j: j < List.length ms



Goals accomplished! 🐙
⟩).
last: {α : Type} → Meas
last
> (
ms: ?m.9152
ms
.
get: {α : Type ?u.9206} → (as : List α) → Fin (List.length as)α
get
j:
j
,

Goals accomplished! 🐙
ms: List Meas

h: last_decreasing ms

i, j:

h_i: i < List.length ms

h_j: j < List.length ms



Goals accomplished! 🐙
⟩).
last: {α : Type} → Meas
last
:=

Goals accomplished! 🐙
α✝: Type

ms: List Meas

h: 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 }).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


(List.get ms { val := i, isLt := hi }).last > (List.get ms { val := j, isLt := hj }).last
α✝: Type

ms: List Meas

h: 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 }).last
α✝: Type

h: last_decreasing []

i, j:

hi: i < List.length []

hj: j < List.length []

h_lt: i < j


nil
(List.get [] { val := i, isLt := hi }).last > (List.get [] { val := j, isLt := hj }).last
α✝: 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
(List.get (head✝ :: tail✝) { val := i, isLt := hi }).last > (List.get (head✝ :: tail✝) { val := j, isLt := hj }).last
α✝: Type

ms: List Meas

h: 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 }).last
α✝: Type

h: last_decreasing []

i, j:

hi: i < List.length []

hj: j < List.length []

h_lt: i < j


(List.get [] { val := i, isLt := hi }).last > (List.get [] { val := j, isLt := hj }).last

Goals accomplished! 🐙
α✝: Type

ms: List Meas

h: 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 }).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


(List.get (hd :: tl) { val := i, isLt := hi }).last > (List.get (hd :: tl) { val := j, isLt := hj }).last
α✝: 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


(List.get (hd :: tl) { val := i, isLt := hi }).last > (List.get (hd :: 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


(List.get (hd :: tl) { val := i, isLt := hi }).last > (List.get (hd :: tl) { val := j, isLt := hj }).last
α✝: 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
(List.get (hd :: tl) { val := Nat.zero, isLt := hi }).last > (List.get (hd :: tl) { val := j, isLt := hj }).last
α✝: 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
(List.get (hd :: tl) { val := Nat.succ n✝, isLt := hi }).last > (List.get (hd :: 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


(List.get (hd :: tl) { val := i, isLt := hi }).last > (List.get (hd :: tl) { val := j, isLt := hj }).last
α✝: 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


(List.get (hd :: tl) { val := Nat.zero, isLt := hi }).last > (List.get (hd :: tl) { val := j, isLt := hj }).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

hi, hj: Nat.zero < List.length (hd :: tl)

h_lt: Nat.zero < Nat.zero


zero
(List.get (hd :: tl) { val := Nat.zero, isLt := hi }).last > (List.get (hd :: tl) { val := Nat.zero, isLt := hj }).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

hi: Nat.zero < List.length (hd :: tl)

n✝:

hj: Nat.succ n✝ < List.length (hd :: tl)

h_lt: Nat.zero < Nat.succ n✝


succ
(List.get (hd :: tl) { val := Nat.zero, isLt := hi }).last > (List.get (hd :: tl) { val := Nat.succ n✝, isLt := hj }).last
α✝: 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


(List.get (hd :: tl) { val := Nat.zero, isLt := hi }).last > (List.get (hd :: tl) { val := j, isLt := hj }).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

hi, hj: Nat.zero < List.length (hd :: tl)

h_lt: Nat.zero < Nat.zero


(List.get (hd :: tl) { val := Nat.zero, isLt := hi }).last > (List.get (hd :: tl) { val := Nat.zero, isLt := hj }).last

Goals 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


(List.get (hd :: tl) { val := Nat.zero, isLt := hi }).last > (List.get (hd :: tl) { val := j, isLt := hj }).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

hi: Nat.zero < List.length (hd :: tl)

j:

hj: Nat.succ j < List.length (hd :: tl)

h_lt: Nat.zero < Nat.succ j


(List.get (hd :: tl) { val := Nat.zero, isLt := hi }).last > (List.get (hd :: tl) { val := Nat.succ j, isLt := hj }).last
α✝: 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
(List.get [hd] { val := Nat.zero, isLt := hi }).last > (List.get [hd] { val := Nat.succ j, isLt := hj }).last
α✝: 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
(List.get (hd :: head✝ :: tail✝) { val := Nat.zero, isLt := hi }).last > (List.get (hd :: head✝ :: tail✝) { val := Nat.succ j, isLt := hj }).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

hi: Nat.zero < List.length (hd :: tl)

j:

hj: Nat.succ j < List.length (hd :: tl)

h_lt: Nat.zero < Nat.succ j


(List.get (hd :: tl) { val := Nat.zero, isLt := hi }).last > (List.get (hd :: tl) { val := Nat.succ j, isLt := hj }).last
α✝: 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]


(List.get [hd] { val := Nat.zero, isLt := hi }).last > (List.get [hd] { val := Nat.succ j, isLt := hj }).last

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


(List.get (hd :: tl) { val := Nat.zero, isLt := hi }).last > (List.get (hd :: tl) { val := Nat.succ j, isLt := hj }).last
α✝: 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)


(List.get (hd :: hd2 :: tl) { val := Nat.zero, isLt := hi }).last > (List.get (hd :: hd2 :: tl) { val := Nat.succ j, isLt := hj }).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)

h_lt: Nat.zero < Nat.succ Nat.zero

hj: Nat.succ Nat.zero < List.length (hd :: hd2 :: tl)


zero
(List.get (hd :: hd2 :: tl) { val := Nat.zero, isLt := hi }).last > (List.get (hd :: hd2 :: tl) { val := Nat.succ Nat.zero, isLt := hj }).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)

n✝:

h_lt: Nat.zero < Nat.succ (Nat.succ n✝)

hj: Nat.succ (Nat.succ n✝) < List.length (hd :: hd2 :: tl)


succ
(List.get (hd :: hd2 :: tl) { val := Nat.zero, isLt := hi }).last > (List.get (hd :: hd2 :: tl) { val := Nat.succ (Nat.succ n✝), isLt := hj }).last
α✝: 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)


(List.get (hd :: hd2 :: tl) { val := Nat.zero, isLt := hi }).last > (List.get (hd :: hd2 :: tl) { val := Nat.succ j, isLt := hj }).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)

h_lt: Nat.zero < Nat.succ Nat.zero

hj: Nat.succ Nat.zero < List.length (hd :: hd2 :: tl)


(List.get (hd :: hd2 :: tl) { val := Nat.zero, isLt := hi }).last > (List.get (hd :: hd2 :: tl) { val := Nat.succ Nat.zero, isLt := hj }).last

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)


(List.get (hd :: hd2 :: tl) { val := Nat.zero, isLt := hi }).last > (List.get (hd :: hd2 :: tl) { val := Nat.succ j, isLt := hj }).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)


(List.get (hd :: hd2 :: tl) { val := Nat.zero, isLt := hi }).last > (List.get (hd :: hd2 :: tl) { val := Nat.succ (Nat.succ j), isLt := hj }).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)

this: hd.last > hd2.last


(List.get (hd :: hd2 :: tl) { val := Nat.zero, isLt := hi }).last > (List.get (hd :: hd2 :: tl) { val := Nat.succ (Nat.succ j), isLt := hj }).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)


(List.get (hd :: hd2 :: tl) { val := Nat.zero, isLt := hi }).last > (List.get (hd :: hd2 :: tl) { val := Nat.succ (Nat.succ j), isLt := hj }).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) < Nat.succ (Nat.succ (List.length tl))

this: hd.last > hd2.last


(List.get (hd :: hd2 :: tl) { val := Nat.zero, isLt := hi }).last > (List.get (hd :: hd2 :: tl) { val := Nat.succ (Nat.succ j), isLt := hj }).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)


(List.get (hd :: hd2 :: tl) { val := Nat.zero, isLt := hi }).last > (List.get (hd :: hd2 :: tl) { val := Nat.succ (Nat.succ j), isLt := hj }).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) < Nat.succ (Nat.succ (List.length tl))

this: hd.last > hd2.last


(List.get (hd :: hd2 :: tl) { val := Nat.zero, isLt := hi }).last > (List.get (hd :: hd2 :: tl) { val := Nat.succ (Nat.succ j), isLt := hj }).last

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.last


0 < 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.last


(List.get (hd :: hd2 :: tl) { val := Nat.zero, isLt := hi }).last > (List.get (hd :: hd2 :: tl) { val := Nat.succ (Nat.succ j), isLt := hj }).last

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.last


j + 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.last


j + 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.last


j + 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.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) < Nat.succ (Nat.succ (List.length tl))

this: hd.last > hd2.last


j + 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.last


(List.get (hd :: hd2 :: tl) { val := Nat.zero, isLt := hi }).last > (List.get (hd :: hd2 :: tl) { val := Nat.succ (Nat.succ j), isLt := hj }).last

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.last


0 < j + 1

Goals 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


(List.get (hd :: hd2 :: tl) { val := Nat.zero, isLt := hi }).last > (List.get (hd :: hd2 :: tl) { val := Nat.succ (Nat.succ j), isLt := hj }).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)


(List.get (hd :: hd2 :: tl) { val := Nat.zero, isLt := hi }).last > (List.get (hd :: hd2 :: tl) { val := Nat.succ (Nat.succ j), isLt := hj }).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


(List.get (hd :: hd2 :: tl) { val := Nat.zero, isLt := hi }).last > (List.get (hd :: hd2 :: tl) { val := Nat.succ (Nat.succ j), isLt := hj }).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)


(List.get (hd :: hd2 :: tl) { val := Nat.zero, isLt := hi }).last > (List.get (hd :: hd2 :: tl) { val := Nat.succ (Nat.succ j), isLt := hj }).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


(List.get (hd :: hd2 :: tl) { val := Nat.zero, isLt := hi }).last > (List.get (hd :: hd2 :: tl) { val := Nat.succ (Nat.succ j), isLt := hj }).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
(List.get (hd :: hd2 :: tl) { val := Nat.succ (Nat.succ j), isLt := hj }).last < ?b
α✝: 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
?b < (List.get (hd :: hd2 :: tl) { val := Nat.zero, isLt := hi }).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


b

Goals 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


(List.get (hd :: tl) { val := i, isLt := hi }).last > (List.get (hd :: tl) { val := j, isLt := hj }).last
α✝: 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


(List.get (hd :: tl) { val := Nat.succ i, isLt := hi }).last > (List.get (hd :: tl) { val := j, isLt := hj }).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)

hj: Nat.zero < List.length (hd :: tl)

h_lt: Nat.succ i < Nat.zero


zero
(List.get (hd :: tl) { val := Nat.succ i, isLt := hi }).last > (List.get (hd :: tl) { val := Nat.zero, isLt := hj }).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)

n✝:

hj: Nat.succ n✝ < List.length (hd :: tl)

h_lt: Nat.succ i < Nat.succ n✝


succ
(List.get (hd :: tl) { val := Nat.succ i, isLt := hi }).last > (List.get (hd :: tl) { val := Nat.succ n✝, isLt := hj }).last
α✝: 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


(List.get (hd :: tl) { val := Nat.succ i, isLt := hi }).last > (List.get (hd :: tl) { val := j, isLt := hj }).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)

hj: Nat.zero < List.length (hd :: tl)

h_lt: Nat.succ i < Nat.zero


(List.get (hd :: tl) { val := Nat.succ i, isLt := hi }).last > (List.get (hd :: tl) { val := Nat.zero, isLt := hj }).last

Goals 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


(List.get (hd :: tl) { val := Nat.succ i, isLt := hi }).last > (List.get (hd :: tl) { val := j, isLt := hj }).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 j


(List.get (hd :: tl) { val := Nat.succ i, isLt := hi }).last > (List.get (hd :: tl) { val := Nat.succ j, isLt := hj }).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 < Nat.succ (List.length tl)

j:

hj: Nat.succ j < Nat.succ (List.length tl)

h_lt: Nat.succ i < Nat.succ j


(List.get (hd :: tl) { val := Nat.succ i, isLt := hi }).last > (List.get (hd :: tl) { val := Nat.succ j, isLt := hj }).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 j


(List.get (hd :: tl) { val := Nat.succ i, isLt := hi }).last > (List.get (hd :: tl) { val := Nat.succ j, isLt := hj }).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 < Nat.succ (List.length tl)

j:

hj: Nat.succ j < Nat.succ (List.length tl)

h_lt: Nat.succ i < Nat.succ j


(List.get (hd :: tl) { val := Nat.succ i, isLt := hi }).last > (List.get (hd :: tl) { val := Nat.succ j, isLt := hj }).last

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

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



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

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


(List.get (hd :: tl) { val := Nat.succ i, isLt := hi }).last > (List.get (hd :: tl) { val := Nat.succ j, isLt := hj }).last

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

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



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

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


(List.get (hd :: tl) { val := Nat.succ i, isLt := hi }).last > (List.get (hd :: tl) { val := Nat.succ j, isLt := hj }).last

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

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


i < j

Goals 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


(List.get (hd :: tl) { val := Nat.succ i, isLt := hi }).last > (List.get (hd :: tl) { val := Nat.succ j, isLt := hj }).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 j


(List.get (hd :: tl) { val := Nat.succ i, isLt := hi }).last > (List.get (hd :: tl) { val := Nat.succ j, isLt := hj }).last

Goals accomplished! 🐙
lemma
cost_increasing_head: ∀ {α : Type} {F : Factory α} {x y : Meas} {xs : List Meas}, cost_increasing F (x :: y :: xs)Factory.lt F x.cost y.cost
cost_increasing_head
(
h: cost_increasing F (x :: y :: xs)
h
:
cost_increasing: {α : Type} → Factory αList MeasProp
cost_increasing
F: ?m.21738
F
(
x: ?m.21748
x
::
y: ?m.21758
y
::
xs: ?m.21768
xs
)) :
F: ?m.21738
F
.
lt: {α : Type} → Factory αααProp
lt
x: ?m.21748
x
.
cost: {α : Type} → Measα
cost
y: ?m.21758
y
.
cost: {α : Type} → Measα
cost
:=

Goals accomplished! 🐙
α✝: Type

F: Factory α✝

x, y: Meas

xs: List Meas

h: cost_increasing F (x :: y :: xs)


Factory.lt F x.cost y.cost
α✝: Type

F: Factory α✝

x, y: Meas

xs: List Meas

h: cost_increasing F (x :: y :: xs)


Factory.lt F x.cost y.cost

Goals accomplished! 🐙
α✝: Type

F: Factory α✝

x, y: Meas

xs: List Meas

h: cost_increasing F (x :: y :: xs)


0 < List.length (x :: y :: xs)

Goals accomplished! 🐙
α✝: Type

F: Factory α✝

x, y: Meas

xs: List Meas

h: cost_increasing F (x :: y :: xs)


Factory.lt F x.cost y.cost

Goals accomplished! 🐙
α✝: Type

F: Factory α✝

x, y: Meas

xs: List Meas

h: cost_increasing F (x :: y :: xs)


0 + 1 < List.length (x :: y :: xs)

Goals accomplished! 🐙

Goals accomplished! 🐙
lemma
cost_increasing_rest: ∀ {α : Type} {F : Factory α} {x : Meas} {xs : List Meas}, cost_increasing F (x :: xs)cost_increasing F xs
cost_increasing_rest
(
h: cost_increasing F (x :: xs)
h
:
cost_increasing: {α : Type} → Factory αList MeasProp
cost_increasing
F: ?m.22115
F
(
x: ?m.22125
x
::
xs: ?m.22133
xs
)) :
cost_increasing: {α : Type} → Factory αList MeasProp
cost_increasing
F: ?m.22115
F
xs: ?m.22133
xs
:=

Goals accomplished! 🐙
α✝: Type

F: Factory α✝

x: Meas

xs: List Meas

h: cost_increasing F (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 xs


Factory.lt F (List.get xs { val := i, isLt := hi✝ }).cost (List.get xs { val := i + 1, isLt := hj✝ }).cost
α✝: Type

F: Factory α✝

x: Meas

xs: List Meas

h: cost_increasing F (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 xs


Factory.lt F (List.get xs { val := i, isLt := hi✝ }).cost (List.get xs { val := i + 1, isLt := hj✝ }).cost

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 xs


i + 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 xs


i + 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 xs


i + 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 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 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 xs


i + 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 xs


Factory.lt F (List.get xs { val := i, isLt := hi✝ }).cost (List.get xs { val := i + 1, isLt := hj✝ }).cost

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 xs


i + 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 xs


i + 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 xs


i + 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 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 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 xs


i + 1 + 1 < List.length (x :: xs)

Goals accomplished! 🐙

Goals accomplished! 🐙

Goals accomplished! 🐙
lemma
cost_increasing_empty: ∀ {α : Type} {F : Factory α}, cost_increasing F []
cost_increasing_empty
:
cost_increasing: {α : Type} → Factory αList MeasProp
cost_increasing
F: ?m.27168
F
[]: List ?m.27175
[]
:=

Goals accomplished! 🐙
α✝: Type

F: Factory α✝


α✝: Type

F: Factory α✝

i✝:

hi✝: i✝ < List.length []

hj✝: i✝ + 1 < List.length []


Factory.lt F (List.get [] { val := i✝, isLt := hi✝ }).cost (List.get [] { val := i✝ + 1, isLt := hj✝ }).cost
α✝: Type

F: Factory α✝



Goals accomplished! 🐙
lemma
cost_increasing_one: ∀ {α : Type} {F : Factory α} {x : Meas}, cost_increasing F [x]
cost_increasing_one
:
cost_increasing: {α : Type} → Factory αList MeasProp
cost_increasing
F: ?m.27288
F
[
x: ?m.27298
x
] :=

Goals accomplished! 🐙
α✝: Type

F: Factory α✝

x: Meas


α✝: Type

F: Factory α✝

x: Meas

i✝:

hi✝: i✝ < List.length [x]

hj✝: i✝ + 1 < List.length [x]


Factory.lt F (List.get [x] { val := i✝, isLt := hi✝ }).cost (List.get [x] { val := i✝ + 1, isLt := hj✝ }).cost
α✝: Type

F: Factory α✝

x: Meas



Goals accomplished! 🐙
lemma
cost_increasing_cons: ∀ {α : Type} {F : Factory α} (x y : Meas) (xs : List Meas), Factory.lt F x.cost y.costcost_increasing F (y :: xs)cost_increasing F (x :: y :: xs)
cost_increasing_cons
(
x: Meas
x
y: Meas
y
:
Meas: {α : Type} → Type
Meas
) (
xs: List Meas
xs
:
List: Type ?u.27790 → Type ?u.27790
List
Meas: {α : Type} → Type
Meas
) (
h_cost: ?m.27794
h_cost
:
F: ?m.27781
F
F.lt x.cost y.cost: Sort ?u.27776
.
lt: {α : Type} → Factory αααProp
lt
F.lt x.cost y.cost: Sort ?u.27776
x: Meas
x
F.lt x.cost y.cost: Sort ?u.27776
.
cost: {α : Type} → Measα
cost
F.lt x.cost y.cost: Sort ?u.27776
y: Meas
y
F.lt x.cost y.cost: Sort ?u.27776
.
cost: {α : Type} → Measα
cost
) (
h: cost_increasing F (y :: xs)
h
:
cost_increasing: {α : Type} → Factory αList MeasProp
cost_increasing
F: ?m.27781
F
(
y: Meas
y
::
xs: List Meas
xs
)) :
cost_increasing: {α : Type} → Factory αList MeasProp
cost_increasing
F: ?m.27781
F
(
x: Meas
x
::
y: Meas
y
::
xs: List Meas
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✝: i < List.length (x :: y :: xs)

hj✝: i + 1 < List.length (x :: y :: xs)


Factory.lt F (List.get (x :: y :: xs) { val := i, isLt := hi✝ }).cost (List.get (x :: y :: xs) { val := i + 1, isLt := hj✝ }).cost
α✝: 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
Factory.lt F (List.get (x :: y :: xs) { val := Nat.zero, isLt := hi✝ }).cost (List.get (x :: y :: xs) { val := Nat.zero + 1, isLt := hj✝ }).cost
α✝: 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
Factory.lt F (List.get (x :: y :: xs) { val := Nat.succ n✝, isLt := hi✝ }).cost (List.get (x :: y :: xs) { val := Nat.succ n✝ + 1, isLt := hj✝ }).cost
α✝: 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)


Factory.lt F (List.get (x :: y :: xs) { val := Nat.zero, isLt := hi✝ }).cost (List.get (x :: y :: xs) { val := Nat.zero + 1, isLt := hj✝ }).cost

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)


Factory.lt F (List.get (x :: y :: xs) { val := Nat.succ i, isLt := hi✝ }).cost (List.get (x :: y :: xs) { val := Nat.succ i + 1, isLt := hj✝ }).cost
α✝: 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)


Factory.lt F (List.get (x :: y :: xs) { val := Nat.succ i, isLt := hi✝ }).cost (List.get (x :: y :: xs) { val := Nat.succ i + 1, isLt := hj✝ }).cost

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 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)


Factory.lt F (List.get (x :: y :: xs) { val := Nat.succ i, isLt := hi✝ }).cost (List.get (x :: y :: xs) { val := Nat.succ i + 1, isLt := hj✝ }).cost

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 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! 🐙

Goals accomplished! 🐙
lemma
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 < jFactory.lt F (List.get ms { val := i, isLt := h_i }).cost (List.get ms { val := j, isLt := h_j }).cost
cost_increasing_strong
(h :
cost_increasing: {α : Type} → Factory αList MeasProp
cost_increasing
F: ?m.30327
F
ms: ?m.30334
ms
) : ∀ (
i:
i
j:
j
:
: Type
) (
h_i: i < List.length ms
h_i
:
i:
i
<
ms: ?m.30334
ms
.
length: {α : Type ?u.30348} → List α
length
) (
h_j: j < List.length ms
h_j
:
j:
j
<
ms: ?m.30334
ms
.
length: {α : Type ?u.30360} → List α
length
),
i:
i
<
j:
j
F: ?m.30327
F
.
lt: {α : Type} → Factory αααProp
lt
(
ms: ?m.30334
ms
.
get: {α : Type ?u.30379} → (as : List α) → Fin (List.length as)α
get
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 ms



Goals accomplished! 🐙
⟩).
cost: {α : Type} → Measα
cost
(
ms: ?m.30334
ms
.
get: {α : Type ?u.30393} → (as : List α) → Fin (List.length as)α
get
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 ms



Goals accomplished! 🐙
⟩).
cost: {α : Type} → Measα
cost
:=

Goals accomplished! 🐙
α✝: Type

F: Factory α✝

ms: List Meas

h: cost_increasing F ms


∀ (i j : ) (h_i : i < List.length ms) (h_j : j < List.length ms), i < jFactory.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 < j


Factory.lt F (List.get ms { val := i, isLt := hi }).cost (List.get ms { val := j, isLt := hj }).cost
α✝: Type

F: Factory α✝

ms: List Meas

h: cost_increasing F ms


∀ (i j : ) (h_i : i < List.length ms) (h_j : j < List.length ms), i < jFactory.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


nil
Factory.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 < jFactory.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


cons
Factory.lt F (List.get (head✝ :: tail✝) { val := i, isLt := hi }).cost (List.get (head✝ :: tail✝) { val := j, isLt := hj }).cost
α✝: Type

F: Factory α✝

ms: List Meas

h: cost_increasing F ms


∀ (i j : ) (h_i : i < List.length ms) (h_j : j < List.length ms), i < jFactory.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


Factory.lt F (List.get [] { val := i, isLt := hi }).cost (List.get [] { val := j, isLt := hj }).cost

Goals accomplished! 🐙
α✝: Type

F: Factory α✝

ms: List Meas

h: cost_increasing F ms


∀ (i j : ) (h_i : i < List.length ms) (h_j : j < List.length ms), i < jFactory.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 < jFactory.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 < j


Factory.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 < jFactory.lt F (List.get tl { val := i, isLt := hi }).cost (List.get tl { val := j, isLt := hj }).cost


Factory.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 < jFactory.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 < j


Factory.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 < jFactory.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
Factory.lt F (List.get (hd :: tl) { val := Nat.zero, 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 < jFactory.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
Factory.lt F (List.get (hd :: tl) { val := Nat.succ n✝, 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 < jFactory.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 < j


Factory.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 < jFactory.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


Factory.lt F (List.get (hd :: tl) { val := Nat.zero, 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)

ih: ∀ (i j : ) (hi : i < List.length tl) (hj : j < List.length tl), i < jFactory.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
Factory.lt F (List.get (hd :: tl) { val := Nat.zero, isLt := hi }).cost (List.get (hd :: tl) { val := Nat.zero, isLt := hj }).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 < jFactory.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
Factory.lt F (List.get (hd :: tl) { val := Nat.zero, isLt := hi }).cost (List.get (hd :: tl) { val := Nat.succ n✝, 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 < jFactory.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


Factory.lt F (List.get (hd :: tl) { val := Nat.zero, 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)

ih: ∀ (i j : ) (hi : i < List.length tl) (hj : j < List.length tl), i < jFactory.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


Factory.lt F (List.get (hd :: tl) { val := Nat.zero, isLt := hi }).cost (List.get (hd :: tl) { val := Nat.zero, isLt := hj }).cost

Goals 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 < jFactory.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


Factory.lt F (List.get (hd :: tl) { val := Nat.zero, 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)

ih: ∀ (i j : ) (hi : i < List.length tl) (hj : j < List.length tl), i < jFactory.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


Factory.lt F (List.get (hd :: tl) { val := Nat.zero, isLt := hi }).cost (List.get (hd :: tl) { val := Nat.succ j, isLt := hj }).cost
α✝: 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 < jFactory.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]


nil
Factory.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 < jFactory.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
Factory.lt F (List.get (hd :: head✝ :: tail✝) { val := Nat.zero, isLt := hi }).cost (List.get (hd :: head✝ :: tail✝) { val := Nat.succ j, isLt := hj }).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 < jFactory.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


Factory.lt F (List.get (hd :: tl) { val := Nat.zero, isLt := hi }).cost (List.get (hd :: tl) { val := Nat.succ j, isLt := hj }).cost
α✝: 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 < jFactory.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 }).cost

Goals 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 < jFactory.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


Factory.lt F (List.get (hd :: tl) { val := Nat.zero, isLt := hi }).cost (List.get (hd :: tl) { val := Nat.succ j, isLt := hj }).cost
α✝: 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 < jFactory.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)


Factory.lt F (List.get (hd :: hd2 :: tl) { val := Nat.zero, isLt := hi }).cost (List.get (hd :: hd2 :: tl) { val := Nat.succ j, isLt := hj }).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 < jFactory.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
Factory.lt F (List.get (hd :: hd2 :: tl) { val := Nat.zero, isLt := hi }).cost (List.get (hd :: hd2 :: tl) { val := Nat.succ Nat.zero, isLt := hj }).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 < jFactory.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
Factory.lt F (List.get (hd :: hd2 :: tl) { val := Nat.zero, isLt := hi }).cost (List.get (hd :: hd2 :: tl) { val := Nat.succ (Nat.succ n✝), isLt := hj }).cost
α✝: 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 < jFactory.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)


Factory.lt F (List.get (hd :: hd2 :: tl) { val := Nat.zero, isLt := hi }).cost (List.get (hd :: hd2 :: tl) { val := Nat.succ j, isLt := hj }).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 < jFactory.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)


Factory.lt F (List.get (hd :: hd2 :: tl) { val := Nat.zero, isLt := hi }).cost (List.get (hd :: hd2 :: tl) { val := Nat.succ Nat.zero, isLt := hj }).cost

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 < jFactory.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)


Factory.lt F (List.get (hd :: hd2 :: tl) { val := Nat.zero, isLt := hi }).cost (List.get (hd :: hd2 :: tl) { val := Nat.succ j, isLt := hj }).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 < jFactory.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)


Factory.lt F (List.get (hd :: hd2 :: tl) { val := Nat.zero, isLt := hi }).cost (List.get (hd :: hd2 :: tl) { val := Nat.succ (Nat.succ j), isLt := hj }).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 < jFactory.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


Factory.lt F (List.get (hd :: hd2 :: tl) { val := Nat.zero, isLt := hi }).cost (List.get (hd :: hd2 :: tl) { val := Nat.succ (Nat.succ j), isLt := hj }).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 < jFactory.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)


Factory.lt F (List.get (hd :: hd2 :: tl) { val := Nat.zero, isLt := hi }).cost (List.get (hd :: hd2 :: tl) { val := Nat.succ (Nat.succ j), isLt := hj }).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 < jFactory.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


Factory.lt F (List.get (hd :: hd2 :: tl) { val := Nat.zero, isLt := hi }).cost (List.get (hd :: hd2 :: tl) { val := Nat.succ (Nat.succ j), isLt := hj }).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 < jFactory.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)


Factory.lt F (List.get (hd :: hd2 :: tl) { val := Nat.zero, isLt := hi }).cost (List.get (hd :: hd2 :: tl) { val := Nat.succ (Nat.succ j), isLt := hj }).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 < jFactory.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


Factory.lt F (List.get (hd :: hd2 :: tl) { val := Nat.zero, isLt := hi }).cost (List.get (hd :: hd2 :: tl) { val := Nat.succ (Nat.succ j), isLt := hj }).cost

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 < jFactory.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


0 < 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 < jFactory.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


Factory.lt F (List.get (hd :: hd2 :: tl) { val := Nat.zero, isLt := hi }).cost (List.get (hd :: hd2 :: tl) { val := Nat.succ (Nat.succ j), isLt := hj }).cost

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 < jFactory.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


j + 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 < jFactory.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


j + 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 < jFactory.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


j + 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 < jFactory.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 < jFactory.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


j + 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 < jFactory.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


Factory.lt F (List.get (hd :: hd2 :: tl) { val := Nat.zero, isLt := hi }).cost (List.get (hd :: hd2 :: tl) { val := Nat.succ (Nat.succ j), isLt := hj }).cost

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 < jFactory.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


0 < j + 1

Goals 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


Factory.lt F (List.get (hd :: hd2 :: tl) { val := Nat.zero, isLt := hi }).cost (List.get (hd :: hd2 :: tl) { val := Nat.succ (Nat.succ j), isLt := hj }).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 < jFactory.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)


Factory.lt F (List.get (hd :: hd2 :: tl) { val := Nat.zero, isLt := hi }).cost (List.get (hd :: hd2 :: tl) { val := Nat.succ (Nat.succ j), isLt := hj }).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


Factory.lt F (List.get (hd :: hd2 :: tl) { val := Nat.zero, isLt := hi }).cost (List.get (hd :: hd2 :: tl) { val := Nat.succ (Nat.succ j), isLt := hj }).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 < jFactory.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)


Factory.lt F (List.get (hd :: hd2 :: tl) { val := Nat.zero, isLt := hi }).cost (List.get (hd :: hd2 :: tl) { val := Nat.succ (Nat.succ j), isLt := hj }).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


Factory.lt F (List.get (hd :: hd2 :: tl) { val := Nat.zero, isLt := hi }).cost (List.get (hd :: hd2 :: tl) { val := Nat.succ (Nat.succ j), isLt := hj }).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₂
Factory.lt F ?m.34280 (List.get (hd :: hd2 :: tl) { val := Nat.succ (Nat.succ j), isLt := hj }).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


α✝

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 < jFactory.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 < j


Factory.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 < jFactory.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


Factory.lt F (List.get (hd :: tl) { val := Nat.succ 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)

ih: ∀ (i j : ) (hi : i < List.length tl) (hj : j < List.length tl), i < jFactory.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
Factory.lt F (List.get (hd :: tl) { val := Nat.succ i, isLt := hi }).cost (List.get (hd :: tl) { val := Nat.zero, isLt := hj }).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 < jFactory.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
Factory.lt F (List.get (hd :: tl) { val := Nat.succ i, isLt := hi }).cost (List.get (hd :: tl) { val := Nat.succ n✝, 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 < jFactory.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


Factory.lt F (List.get (hd :: tl) { val := Nat.succ 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)

ih: ∀ (i j : ) (hi : i < List.length tl) (hj : j < List.length tl), i < jFactory.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


Factory.lt F (List.get (hd :: tl) { val := Nat.succ i, isLt := hi }).cost (List.get (hd :: tl) { val := Nat.zero, isLt := hj }).cost

Goals 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 < jFactory.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


Factory.lt F (List.get (hd :: tl) { val := Nat.succ 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)

ih: ∀ (i j : ) (hi : i < List.length tl) (hj : j < List.length tl), i < jFactory.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


Factory.lt F (List.get (hd :: tl) { val := Nat.succ i, isLt := hi }).cost (List.get (hd :: tl) { val := Nat.succ j, isLt := hj }).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 < jFactory.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


Factory.lt F (List.get (hd :: tl) { val := Nat.succ i, isLt := hi }).cost (List.get (hd :: tl) { val := Nat.succ j, isLt := hj }).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 < jFactory.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


Factory.lt F (List.get (hd :: tl) { val := Nat.succ i, isLt := hi }).cost (List.get (hd :: tl) { val := Nat.succ j, isLt := hj }).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 < jFactory.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


Factory.lt F (List.get (hd :: tl) { val := Nat.succ i, isLt := hi }).cost (List.get (hd :: tl) { val := Nat.succ j, isLt := hj }).cost

Goals 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 < jFactory.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



Goals 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 < jFactory.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


Factory.lt F (List.get (hd :: tl) { val := Nat.succ i, isLt := hi }).cost (List.get (hd :: tl) { val := Nat.succ j, isLt := hj }).cost

Goals 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 < jFactory.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



Goals 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 < jFactory.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


Factory.lt F (List.get (hd :: tl) { val := Nat.succ i, isLt := hi }).cost (List.get (hd :: tl) { val := Nat.succ j, isLt := hj }).cost

Goals 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 < jFactory.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


i < j

Goals 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


Factory.lt F (List.get (hd :: tl) { val := Nat.succ i, isLt := hi }).cost (List.get (hd :: tl) { val := Nat.succ j, isLt := hj }).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 < jFactory.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


Factory.lt F (List.get (hd :: tl) { val := Nat.succ i, isLt := hi }).cost (List.get (hd :: tl) { val := Nat.succ j, isLt := hj }).cost

Goals accomplished! 🐙
lemma
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 = true
cost_increasing_non_strict_head
(h :
cost_increasing_non_strict: {α : Type} → Factory αList MeasProp
cost_increasing_non_strict
F: ?m.42130
F
(
x: ?m.42140
x
::
y: ?m.42150
y
::
xs: ?m.42160
xs
)) :
F: ?m.42130
F
.
le: {α : Type} → Factory αααBool
le
x: ?m.42140
x
.
cost: {α : Type} → Measα
cost
y: ?m.42150
y
.
cost: {α : Type} → Measα
cost
:=

Goals accomplished! 🐙
α✝: Type

F: Factory α✝

x, y: Meas

xs: List Meas

h: cost_increasing_non_strict F (x :: y :: xs)


Factory.le F x.cost y.cost = true
α✝: Type

F: Factory α✝

x, y: Meas

xs: List Meas

h: cost_increasing_non_strict F (x :: y :: xs)


Factory.le F x.cost y.cost = true

Goals accomplished! 🐙
α✝: Type

F: Factory α✝

x, y: Meas

xs: List Meas

h: cost_increasing_non_strict F (x :: y :: xs)


0 < List.length (x :: y :: xs)

Goals accomplished! 🐙
α✝: Type

F: Factory α✝

x, y: Meas

xs: List Meas

h: cost_increasing_non_strict F (x :: y :: xs)


Factory.le F x.cost y.cost = true

Goals accomplished! 🐙
α✝: Type

F: Factory α✝

x, y: Meas

xs: List Meas

h: cost_increasing_non_strict F (x :: y :: xs)


0 + 1 < List.length (x :: y :: xs)

Goals accomplished! 🐙

Goals accomplished! 🐙
lemma
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 xs
cost_increasing_non_strict_rest
(h :
cost_increasing_non_strict: {α : Type} → Factory αList MeasProp
cost_increasing_non_strict
F: ?m.42513
F
(
x: ?m.42523
x
::
xs: ?m.42531
xs
)) :
cost_increasing_non_strict: {α : Type} → Factory αList MeasProp
cost_increasing_non_strict
F: ?m.42513
F
xs: ?m.42531
xs
:=

Goals accomplished! 🐙
α✝: Type

F: Factory α✝

x: Meas

xs: List Meas

h: cost_increasing_non_strict F (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 xs


Factory.le F (List.get xs { val := i, isLt := hi✝ }).cost (List.get xs { val := i + 1, isLt := hj✝ }).cost = true
α✝: Type

F: Factory α✝

x: Meas

xs: List Meas

h: cost_increasing_non_strict F (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 xs


Factory.le F (List.get xs { val := i, isLt := hi✝ }).cost (List.get xs { val := i + 1, isLt := hj✝ }).cost = true

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 xs


i + 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 xs


i + 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 xs


i + 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 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 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 xs


i + 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 xs


Factory.le F (List.get xs { val := i, isLt := hi✝ }).cost (List.get xs { val := i + 1, isLt := hj✝ }).cost = true

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 xs


i + 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 xs


i + 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 xs


i + 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 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 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 xs


i + 1 + 1 < List.length (x :: xs)

Goals accomplished! 🐙

Goals accomplished! 🐙

Goals accomplished! 🐙
lemma
cost_increasing_non_strict_empty: ∀ {α : Type} {F : Factory α}, cost_increasing_non_strict F []
cost_increasing_non_strict_empty
:
cost_increasing_non_strict: {α : Type} → Factory αList MeasProp
cost_increasing_non_strict
F: ?m.47567
F
[]: List ?m.47574
[]
:=

Goals accomplished! 🐙
α✝: Type

F: Factory α✝

i✝:

hi✝: i✝ < List.length []

hj✝: i✝ + 1 < List.length []


Factory.le F (List.get [] { val := i✝, isLt := hi✝ }).cost (List.get [] { val := i✝ + 1, isLt := hj✝ }).cost = true

Goals accomplished! 🐙
lemma
cost_increasing_non_strict_one: ∀ {α : Type} {F : Factory α} {x : Meas}, cost_increasing_non_strict F [x]
cost_increasing_non_strict_one
:
cost_increasing_non_strict: {α : Type} → Factory αList MeasProp
cost_increasing_non_strict
F: ?m.47687
F
[
x: ?m.47697
x
] :=

Goals accomplished! 🐙
α✝: Type

F: Factory α✝

x: Meas


α✝: Type

F: Factory α✝

x: Meas

i✝:

hi✝: i✝ < List.length [x]

hj✝: i✝ + 1 < List.length [x]


Factory.le F (List.get [x] { val := i✝, isLt := hi✝ }).cost (List.get [x] { val := i✝ + 1, isLt := hj✝ }).cost = true
α✝: Type

F: Factory α✝

x: Meas



Goals accomplished! 🐙
lemma
cost_increasing_non_strict_cons: ∀ {α : Type} {F : Factory α} (x y : Meas) (xs : List Meas), Factory.le F x.cost y.cost = truecost_increasing_non_strict F (y :: xs)cost_increasing_non_strict F (x :: y :: xs)
cost_increasing_non_strict_cons
(
x: Meas
x
y: Meas
y
:
Meas: {α : Type} → Type
Meas
) (
xs: List Meas
xs
:
List: Type ?u.48172 → Type ?u.48172
List
Meas: {α : Type} → Type
Meas
) (
h_cost: ?m.48193
h_cost
:
F: ?m.48180
F
F.le x.cost y.cost: Sort ?u.48175
.
le: {α : Type} → Factory αααBool
le
F.le x.cost y.cost: Sort ?u.48175
x: Meas
x
F.le x.cost y.cost: Sort ?u.48175
.
cost: {α : Type} → Measα
cost
F.le x.cost y.cost: Sort ?u.48175
y: Meas
y
F.le x.cost y.cost: Sort ?u.48175
.
cost: {α : Type} → Measα
cost
) (h :
cost_increasing_non_strict: {α : Type} → Factory αList MeasProp
cost_increasing_non_strict
F: ?m.48180
F
(
y: Meas
y
::
xs: List Meas
xs
)) :
cost_increasing_non_strict: {α : Type} → Factory αList MeasProp
cost_increasing_non_strict
F: ?m.48180
F
(
x: Meas
x
::
y: Meas
y
::
xs: List Meas
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)


α✝: 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)


Factory.le F (List.get (x :: y :: xs) { val := i, isLt := hi✝ }).cost (List.get (x :: y :: xs) { val := i + 1, isLt := hj✝ }).cost = true
α✝: 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)


α✝: 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
Factory.le F (List.get (x :: y :: xs) { val := Nat.zero, isLt := hi✝ }).cost (List.get (x :: y :: xs) { val := Nat.zero + 1, isLt := hj✝ }).cost = true
α✝: 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
Factory.le F (List.get (x :: y :: xs) { val := Nat.succ n✝, isLt := hi✝ }).cost (List.get (x :: y :: xs) { val := Nat.succ n✝ + 1, isLt := hj✝ }).cost = true
α✝: 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)


α✝: 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)


Factory.le F (List.get (x :: y :: xs) { val := Nat.zero, isLt := hi✝ }).cost (List.get (x :: y :: xs) { val := Nat.zero + 1, isLt := hj✝ }).cost = true

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)


α✝: 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)


Factory.le F (List.get (x :: y :: xs) { val := Nat.succ i, isLt := hi✝ }).cost (List.get (x :: y :: xs) { val := Nat.succ i + 1, isLt := hj✝ }).cost = true
α✝: 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)


Factory.le F (List.get (x :: y :: xs) { val := Nat.succ i, isLt := hi✝ }).cost (List.get (x :: y :: xs) { val := Nat.succ i + 1, isLt := hj✝ }).cost = true

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 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)


Factory.le F (List.get (x :: y :: xs) { val := Nat.succ i, isLt := hi✝ }).cost (List.get (x :: y :: xs) { val := Nat.succ i + 1, isLt := hj✝ }).cost = true

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 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! 🐙

Goals accomplished! 🐙
lemma
last_decreasing_concat: ∀ {α : Type} {ms : List Meas} (F : Factory α) (m : Meas), last_decreasing mslast_decreasing (List.map (fun m' => Meas.concat F m m') ms)
last_decreasing_concat
(
F: Factory α
F
:
Factory: TypeType
Factory
α: ?m.50891
α
) (
m: Meas
m
:
Meas: {α : Type} → Type
Meas
) (h :
last_decreasing: {α : Type} → List MeasProp
last_decreasing
ms: ?m.50901
ms
) :
last_decreasing: {α : Type} → List MeasProp
last_decreasing
(
ms: ?m.50901
ms
.
map: {α : Type ?u.50916} → {β : Type ?u.50915} → (αβ) → List αList β
map
(fun
m': ?m.50924
m'
=>
Meas.concat: {α : Type} → Factory αMeasMeasMeas
Meas.concat
F: Factory α
F
m: Meas
m
m': ?m.50924
m'
)) :=

Goals accomplished! 🐙
α: Type

ms: List Meas

F: Factory α

m: Meas

h: last_decreasing ms


last_decreasing (List.map (fun m' => Meas.concat F m m') ms)
α: Type

F: Factory α

m: Meas

h: last_decreasing []


nil
last_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✝)


cons
last_decreasing (List.map (fun m' => Meas.concat F m m') (head✝ :: tail✝))
α: Type

ms: List Meas

F: Factory α

m: Meas

h: last_decreasing ms


last_decreasing (List.map (fun m' => Meas.concat F m m') ms)
α: Type

F: Factory α

m: Meas

h: last_decreasing []


last_decreasing (List.map (fun m' => Meas.concat F m m') [])

Goals accomplished! 🐙
α: Type

ms: List Meas

F: Factory α

m: Meas

h: last_decreasing ms


last_decreasing (List.map (fun m' => Meas.concat F m m') ms)
α: Type

F: Factory α

m, hd: Meas

tl: List Meas

ih: last_decreasing tllast_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 tllast_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') [])


nil
last_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✝))


cons
last_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 tllast_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 tllast_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✝))


h
last_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✝).last

Goals 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✝)

Goals accomplished! 🐙
lemma
cost_increasing_non_strict_concat: ∀ {α : Type} {F : Factory α} {ms : List Meas} (m : Meas), cost_increasing F mscost_increasing_non_strict F (List.map (fun m' => Meas.concat F m m') ms)
cost_increasing_non_strict_concat
(
m: Meas
m
:
Meas: {α : Type} → Type
Meas
) (h :
cost_increasing: {α : Type} → Factory αList MeasProp
cost_increasing
F: ?m.51395
F
ms: ?m.51405
ms
) :
cost_increasing_non_strict: {α : Type} → Factory αList MeasProp
cost_increasing_non_strict
F: ?m.51395
F
(
ms: ?m.51405
ms
.
map: {α : Type ?u.51418} → {β : Type ?u.51417} → (αβ) → List αList β
map
(fun
m': ?m.51426
m'
=>
Meas.concat: {α : Type} → Factory αMeasMeasMeas
Meas.concat
F: ?m.51395
F
m: Meas
m
m': ?m.51426
m'
)) :=

Goals accomplished! 🐙
α✝: Type

F: Factory α✝

ms: List Meas

m: Meas

h: cost_increasing F ms


α✝: Type

F: Factory α✝

m: Meas

h: cost_increasing F []


nil
α✝: 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✝)


cons
cost_increasing_non_strict F (List.map (fun m' => Meas.concat F m m') (head✝ :: tail✝))
α✝: Type

F: Factory α✝

ms: List Meas

m: Meas

h: cost_increasing F ms


α✝: Type

F: Factory α✝

m: Meas

h: cost_increasing F []



Goals accomplished! 🐙
α✝: Type

F: Factory α✝

ms: List Meas

m: Meas

h: cost_increasing F ms


α✝: Type

F: Factory α✝

m, hd: Meas

tl: List Meas

ih: cost_increasing F tlcost_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 tlcost_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') [])


nil
cost_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✝))


cons
cost_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 tlcost_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 tlcost_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_cost
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

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
cost_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✝.cost


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

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


Factory.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


a
Factory.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


a
Factory.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


a
Factory.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


a
Factory.le F hd.cost head✝.cost = true

Goals 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


a
Factory.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


a
Factory.le F hd.cost head✝.cost = true

Goals 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✝)

Goals accomplished! 🐙
lemma
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 i
last_decreasing_bound
(h :
last_decreasing: {α : Type} → List MeasProp
last_decreasing
ms: ?m.51925
ms
) (
i:
i
:
: Type
) (
hi: List.length ms - 1 - i < List.length ms
hi
:
ms: ?m.51925
ms
.
length: {α : Type ?u.51942} → List α
length
-
1: ?m.51947
1
-
i:
i
<
ms: ?m.51925
ms
.
length: {α : Type ?u.51962} → List α
length
) (
h_bound: i < List.length ms
h_bound
:
i:
i
<
ms: ?m.51925
ms
.
length: {α : Type ?u.52048} → List α
length
) : (
ms: ?m.51925
ms
.
get: {α : Type ?u.52057} → (as : List α) → Fin (List.length as)α
get
ms: ?m.51925
ms
.
length: {α : Type ?u.52073} → List α
length
-
1: ?m.52078
1
-
i:
i
,
hi: List.length ms - 1 - i < List.length ms
hi
⟩).
last: {α : Type} → Meas
last
i:
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
(List.get ms { val := List.length ms - 1 - Nat.zero, isLt := hi }).last Nat.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
(List.get ms { val := List.length ms - 1 - Nat.succ n✝, isLt := hi }).last Nat.succ n✝
α✝: 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


(List.get ms { val := List.length ms - 1 - Nat.zero, isLt := hi }).last Nat.zero

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

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


(List.get ms { val := List.length ms - 1 - Nat.succ i, isLt := hi }).last Nat.succ 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


Nat.succ i (List.get ms { val := List.length ms - 1 - Nat.succ i, isLt := hi }).last
α✝: 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


(List.get ms { val := List.length ms - 1 - Nat.succ i, isLt := hi }).last Nat.succ i
α✝: 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
Nat.succ i (List.get [] { val := List.length [] - 1 - Nat.succ i, isLt := hi }).last
α✝: 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
Nat.succ i (List.get (head✝ :: tail✝) { val := List.length (head✝ :: tail✝) - 1 - Nat.succ i, isLt := hi }).last
α✝: 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


(List.get ms { val := List.length ms - 1 - Nat.succ i, isLt := hi }).last Nat.succ i
α✝: 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 []


Nat.succ i (List.get [] { val := List.length [] - 1 - Nat.succ i, isLt := hi }).last

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


(List.get ms { val := List.length ms - 1 - Nat.succ i, isLt := hi }).last Nat.succ 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)


Nat.succ i (List.get (hd :: tl) { val := List.length (hd :: tl) - 1 - Nat.succ i, isLt := hi }).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 < Nat.succ (List.length tl)


Nat.succ i (List.get (hd :: tl) { val := List.length (hd :: tl) - 1 - Nat.succ i, isLt := hi }).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)


Nat.succ i (List.get (hd :: tl) { val := List.length (hd :: tl) - 1 - Nat.succ i, isLt := hi }).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: i < List.length tl


Nat.succ i (List.get (hd :: tl) { val := List.length (hd :: tl) - 1 - Nat.succ i, isLt := hi }).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)


Nat.succ i (List.get (hd :: tl) { val := List.length (hd :: tl) - 1 - Nat.succ i, isLt := hi }).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: i < List.length tl


Nat.succ i (List.get (hd :: tl) { val := List.length (hd :: tl) - 1 - Nat.succ i, isLt := hi }).last

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 tl


List.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 tl


Nat.succ i (List.get (hd :: tl) { val := List.length (hd :: tl) - 1 - Nat.succ i, isLt := hi }).last

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 tl


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


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


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: i < List.length tl


i < 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


Nat.succ i (List.get (hd :: tl) { val := List.length (hd :: tl) - 1 - Nat.succ i, isLt := hi }).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)


Nat.succ i (List.get (hd :: tl) { val := List.length (hd :: tl) - 1 - Nat.succ i, isLt := hi }).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


Nat.succ i (List.get (hd :: tl) { val := List.length (hd :: tl) - 1 - Nat.succ i, isLt := hi }).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)


Nat.succ i (List.get (hd :: tl) { val := List.length (hd :: tl) - 1 - Nat.succ i, isLt := hi }).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


Nat.succ i (List.get (hd :: tl) { val := List.length (hd :: tl) - 1 - Nat.succ i, isLt := hi }).last

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


List.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)) }).last


Nat.succ i (List.get (hd :: tl) { val := List.length (hd :: tl) - 1 - Nat.succ i, isLt := hi }).last

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


List.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


List.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


List.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


α✝: 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


List.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


n - Nat.succ i < n - 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


List.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


n - Nat.succ i < n - 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


List.length (hd :: tl) - 1 - Nat.succ i < List.length (hd :: tl) - 1 - i
i, n:

h_bound: i < n


n - Nat.succ i < n - 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


List.length (hd :: tl) - 1 - Nat.succ i < List.length (hd :: tl) - 1 - i
i:

h_bound: i < Nat.zero


zero
i, n✝:

h_bound: i < Nat.succ n✝


succ
Nat.succ n✝ - Nat.succ i < Nat.succ n✝ - 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


List.length (hd :: tl) - 1 - Nat.succ i < List.length (hd :: tl) - 1 - i

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


List.length (hd :: tl) - 1 - Nat.succ i < List.length (hd :: tl) - 1 - i
i, n✝:

h_bound: i < Nat.succ n✝


Nat.succ n✝ - Nat.succ i < Nat.succ n✝ - i
i, n✝:

h_bound: i < Nat.succ n✝


n✝ - i < Nat.succ n✝ - i
i, n✝:

h_bound: i < Nat.succ n✝


Nat.succ n✝ - Nat.succ i < Nat.succ n✝ - i
i, n✝:

h_bound: i n✝


n✝ - i < Nat.succ n✝ - i
i, n✝:

h_bound: i < Nat.succ n✝


Nat.succ n✝ - Nat.succ i < Nat.succ n✝ - i
i, n✝:

h_bound: i n✝


n✝ - i < Nat.succ n✝ - i
i, n✝:

h_bound: i n✝


h0
n✝ < Nat.succ n✝
i, n✝:

h_bound: i n✝


h1
i n✝

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: 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


Nat.succ i (List.get (hd :: tl) { val := List.length (hd :: tl) - 1 - Nat.succ i, isLt := hi }).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)


Nat.succ i (List.get (hd :: tl) { val := List.length (hd :: tl) - 1 - Nat.succ i, isLt := hi }).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


Nat.succ i (List.get (hd :: tl) { val := List.length (hd :: tl) - 1 - Nat.succ i, isLt := hi }).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)


Nat.succ i (List.get (hd :: tl) { val := List.length (hd :: tl) - 1 - Nat.succ i, isLt := hi }).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


Nat.succ i (List.get (hd :: tl) { val := List.length (hd :: tl) - 1 - Nat.succ i, isLt := hi }).last

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 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


i < (List.get (hd :: tl) { val := List.length (hd :: tl) - 1 - Nat.succ i, isLt := hi }).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


i < (List.get (hd :: tl) { val := List.length (hd :: tl) - 1 - Nat.succ i, isLt := hi }).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


i < (List.get (hd :: tl) { val := List.length (hd :: tl) - 1 - Nat.succ i, isLt := hi }).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


i < (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


i < (List.get (hd :: tl) { val := List.length (hd :: tl) - 1 - Nat.succ i, isLt := hi }).last

Goals 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)


Nat.succ i (List.get (hd :: tl) { val := List.length (hd :: tl) - 1 - Nat.succ i, isLt := hi }).last

Goals accomplished! 🐙