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.Supports.LastAndCost

/-! 
## Various lemmas related to the `dedup` operation
-/

lemma 
dedup_not_empty: βˆ€ {Ξ± : Type} {ms : List Meas} {F : Factory Ξ±}, ms β‰  [] β†’ dedup F ms β‰  []
dedup_not_empty
(
h: ms β‰  []
h
:
ms: ?m.5
ms
β‰ 
[]: unknown metavariable '?_uniq.11'
[]
) :
dedup: {Ξ± : Type} β†’ Factory Ξ± β†’ List Meas β†’ List Meas
dedup
F: ?m.20
F
ms: ?m.5
ms
β‰ 
[]: List ?m.39
[]
:=

Goals accomplished! πŸ™
α✝: Type

ms: List Meas

F: Factory α✝

h: ms β‰  []


dedup F ms β‰  []
α✝: Type

F: Factory α✝

h: [] β‰  []


nil
dedup F [] β‰  []
α✝: Type

F: Factory α✝

head✝: Meas

tail✝: List Meas

tail_ih✝: tail✝ β‰  [] β†’ dedup F tail✝ β‰  []

h: head✝ :: tail✝ β‰  []


cons
dedup F (head✝ :: tail✝) β‰  []
α✝: Type

ms: List Meas

F: Factory α✝

h: ms β‰  []


dedup F ms β‰  []
α✝: Type

F: Factory α✝

h: [] β‰  []


dedup F [] β‰  []

Goals accomplished! πŸ™
α✝: Type

ms: List Meas

F: Factory α✝

h: ms β‰  []


dedup F ms β‰  []
α✝: Type

F: Factory α✝

hd: Meas

tl: List Meas

ih: tl β‰  [] β†’ dedup F tl β‰  []

h: hd :: tl β‰  []


dedup F (hd :: tl) β‰  []
α✝: Type

F: Factory α✝

hd: Meas

ih: [] β‰  [] β†’ dedup F [] β‰  []

h: [hd] β‰  []


nil
dedup F [hd] β‰  []
α✝: Type

F: Factory α✝

hd, head✝: Meas

tail✝: List Meas

ih: head✝ :: tail✝ β‰  [] β†’ dedup F (head✝ :: tail✝) β‰  []

h: hd :: head✝ :: tail✝ β‰  []


cons
dedup F (hd :: head✝ :: tail✝) β‰  []
α✝: Type

F: Factory α✝

hd: Meas

tl: List Meas

ih: tl β‰  [] β†’ dedup F tl β‰  []

h: hd :: tl β‰  []


dedup F (hd :: tl) β‰  []
α✝: Type

F: Factory α✝

hd: Meas

ih: [] β‰  [] β†’ dedup F [] β‰  []

h: [hd] β‰  []


dedup F [hd] β‰  []

Goals accomplished! πŸ™
α✝: Type

F: Factory α✝

hd: Meas

tl: List Meas

ih: tl β‰  [] β†’ dedup F tl β‰  []

h: hd :: tl β‰  []


dedup F (hd :: tl) β‰  []
α✝: Type

F: Factory α✝

hd, hd': Meas

tl': List Meas

ih: hd' :: tl' β‰  [] β†’ dedup F (hd' :: tl') β‰  []

h: hd :: hd' :: tl' β‰  []


dedup F (hd :: hd' :: tl') β‰  []
α✝: Type

F: Factory α✝

hd, hd': Meas

tl': List Meas

ih: hd' :: tl' β‰  [] β†’ dedup F (hd' :: tl') β‰  []

h: hd :: hd' :: tl' β‰  []


Β¬(if Factory.le F hd'.cost hd.cost = true then dedup F (hd' :: tl') else hd :: dedup F (hd' :: tl')) = []
α✝: Type

F: Factory α✝

hd, hd': Meas

tl': List Meas

ih: hd' :: tl' β‰  [] β†’ dedup F (hd' :: tl') β‰  []

h: hd :: hd' :: tl' β‰  []


dedup F (hd :: hd' :: tl') β‰  []
α✝: Type

F: Factory α✝

hd, hd': Meas

tl': List Meas

ih: hd' :: tl' β‰  [] β†’ dedup F (hd' :: tl') β‰  []

h: hd :: hd' :: tl' β‰  []

h✝: Factory.le F hd'.cost hd.cost = true


inl
Β¬dedup F (hd' :: tl') = []
α✝: Type

F: Factory α✝

hd, hd': Meas

tl': List Meas

ih: hd' :: tl' β‰  [] β†’ dedup F (hd' :: tl') β‰  []

h: hd :: hd' :: tl' β‰  []

h✝: ¬Factory.le F hd'.cost hd.cost = true


inr
α✝: Type

F: Factory α✝

hd, hd': Meas

tl': List Meas

ih: hd' :: tl' β‰  [] β†’ dedup F (hd' :: tl') β‰  []

h: hd :: hd' :: tl' β‰  []


dedup F (hd :: hd' :: tl') β‰  []
α✝: Type

F: Factory α✝

hd, hd': Meas

tl': List Meas

ih: hd' :: tl' β‰  [] β†’ dedup F (hd' :: tl') β‰  []

h: hd :: hd' :: tl' β‰  []

h✝: Factory.le F hd'.cost hd.cost = true


Β¬dedup F (hd' :: tl') = []

Goals accomplished! πŸ™
α✝: Type

F: Factory α✝

hd, hd': Meas

tl': List Meas

ih: hd' :: tl' β‰  [] β†’ dedup F (hd' :: tl') β‰  []

h: hd :: hd' :: tl' β‰  []


dedup F (hd :: hd' :: tl') β‰  []
α✝: Type

F: Factory α✝

hd, hd': Meas

tl': List Meas

ih: hd' :: tl' β‰  [] β†’ dedup F (hd' :: tl') β‰  []

h: hd :: hd' :: tl' β‰  []

h✝: ¬Factory.le F hd'.cost hd.cost = true



Goals accomplished! πŸ™
lemma
dedup_member: βˆ€ {Ξ± : Type} {m : Meas} {F : Factory Ξ±} {ms : List Meas}, m ∈ dedup F ms β†’ m ∈ ms
dedup_member
(
h: m ∈ dedup F ms
h
:
m: ?m.1678
m
∈
dedup: {Ξ± : Type} β†’ Factory Ξ± β†’ List Meas β†’ List Meas
dedup
F: ?m.1698
F
ms: ?m.1720
ms
) :
m: ?m.1678
m
∈
ms: ?m.1720
ms
:=

Goals accomplished! πŸ™
α✝: Type

m: Meas

F: Factory α✝

ms: List Meas

h: m ∈ dedup F ms


m ∈ ms
α✝: Type

m: Meas

F: Factory α✝

h: m ∈ dedup F []


nil
m ∈ []
α✝: Type

m: Meas

F: Factory α✝

head✝: Meas

tail✝: List Meas

tail_ih✝: m ∈ dedup F tail✝ β†’ m ∈ tail✝

h: m ∈ dedup F (head✝ :: tail✝)


cons
m ∈ head✝ :: tail✝
α✝: Type

m: Meas

F: Factory α✝

ms: List Meas

h: m ∈ dedup F ms


m ∈ ms
α✝: Type

m: Meas

F: Factory α✝

h: m ∈ dedup F []


m ∈ []

Goals accomplished! πŸ™
α✝: Type

m: Meas

F: Factory α✝

ms: List Meas

h: m ∈ dedup F ms


m ∈ ms
α✝: Type

m: Meas

F: Factory α✝

hd: Meas

tl: List Meas

ih: m ∈ dedup F tl β†’ m ∈ tl

h: m ∈ dedup F (hd :: tl)


m ∈ hd :: tl
α✝: Type

m: Meas

F: Factory α✝

hd: Meas

ih: m ∈ dedup F [] β†’ m ∈ []

h: m ∈ dedup F [hd]


nil
m ∈ [hd]
α✝: Type

m: Meas

F: Factory α✝

hd, head✝: Meas

tail✝: List Meas

ih: m ∈ dedup F (head✝ :: tail✝) β†’ m ∈ head✝ :: tail✝

h: m ∈ dedup F (hd :: head✝ :: tail✝)


cons
m ∈ hd :: head✝ :: tail✝
α✝: Type

m: Meas

F: Factory α✝

hd: Meas

tl: List Meas

ih: m ∈ dedup F tl β†’ m ∈ tl

h: m ∈ dedup F (hd :: tl)


m ∈ hd :: tl
α✝: Type

m: Meas

F: Factory α✝

hd: Meas

ih: m ∈ dedup F [] β†’ m ∈ []

h: m ∈ dedup F [hd]


m ∈ [hd]
α✝: Type

m: Meas

F: Factory α✝

hd: Meas

ih: m ∈ dedup F [] β†’ m ∈ []

h: m = hd


m ∈ [hd]
α✝: Type

m: Meas

F: Factory α✝

hd: Meas

ih: m ∈ dedup F [] β†’ m ∈ []

h: m ∈ dedup F [hd]


m ∈ [hd]

Goals accomplished! πŸ™
α✝: Type

m: Meas

F: Factory α✝

hd: Meas

tl: List Meas

ih: m ∈ dedup F tl β†’ m ∈ tl

h: m ∈ dedup F (hd :: tl)


m ∈ hd :: tl
α✝: Type

m: Meas

F: Factory α✝

hd, hd': Meas

tl': List Meas

ih: m ∈ dedup F (hd' :: tl') β†’ m ∈ hd' :: tl'

h: m ∈ dedup F (hd :: hd' :: tl')


m ∈ hd :: hd' :: tl'
α✝: Type

m: Meas

F: Factory α✝

hd, hd': Meas

tl': List Meas

ih: m ∈ dedup F (hd' :: tl') β†’ m ∈ hd' :: tl'

h: m ∈ if Factory.le F hd'.cost hd.cost = true then dedup F (hd' :: tl') else hd :: dedup F (hd' :: tl')


m ∈ hd :: hd' :: tl'
α✝: Type

m: Meas

F: Factory α✝

hd, hd': Meas

tl': List Meas

ih: m ∈ dedup F (hd' :: tl') β†’ m ∈ hd' :: tl'

h: m ∈ dedup F (hd :: hd' :: tl')


m ∈ hd :: hd' :: tl'
α✝: Type

m: Meas

F: Factory α✝

hd, hd': Meas

tl': List Meas

ih: m ∈ dedup F (hd' :: tl') β†’ m ∈ hd' :: tl'

h✝: Factory.le F hd'.cost hd.cost = true

h: m ∈ dedup F (hd' :: tl')


inl
m ∈ hd :: hd' :: tl'
α✝: Type

m: Meas

F: Factory α✝

hd, hd': Meas

tl': List Meas

ih: m ∈ dedup F (hd' :: tl') β†’ m ∈ hd' :: tl'

h✝: ¬Factory.le F hd'.cost hd.cost = true

h: m ∈ hd :: dedup F (hd' :: tl')


inr
m ∈ hd :: hd' :: tl'
α✝: Type

m: Meas

F: Factory α✝

hd, hd': Meas

tl': List Meas

ih: m ∈ dedup F (hd' :: tl') β†’ m ∈ hd' :: tl'

h: m ∈ dedup F (hd :: hd' :: tl')


m ∈ hd :: hd' :: tl'
α✝: Type

m: Meas

F: Factory α✝

hd, hd': Meas

tl': List Meas

ih: m ∈ dedup F (hd' :: tl') β†’ m ∈ hd' :: tl'

h✝: Factory.le F hd'.cost hd.cost = true

h: m ∈ dedup F (hd' :: tl')


m ∈ hd :: hd' :: tl'
α✝: Type

m: Meas

F: Factory α✝

hd, hd': Meas

tl': List Meas

h✝: Factory.le F hd'.cost hd.cost = true

h: m ∈ dedup F (hd' :: tl')

ih: m ∈ hd' :: tl'


m ∈ hd :: hd' :: tl'
α✝: Type

m: Meas

F: Factory α✝

hd, hd': Meas

tl': List Meas

ih: m ∈ dedup F (hd' :: tl') β†’ m ∈ hd' :: tl'

h✝: Factory.le F hd'.cost hd.cost = true

h: m ∈ dedup F (hd' :: tl')


m ∈ hd :: hd' :: tl'
α✝: Type

m: Meas

F: Factory α✝

hd, hd': Meas

tl': List Meas

h✝: Factory.le F hd'.cost hd.cost = true

h: m ∈ dedup F (hd' :: tl')

ih: m ∈ hd' :: tl'


m ∈ hd :: hd' :: tl'
α✝: Type

m: Meas

F: Factory α✝

hd, hd': Meas

tl': List Meas

h✝: Factory.le F hd'.cost hd.cost = true

h: m ∈ dedup F (hd' :: tl')

ih: m ∈ hd' :: tl'


m = hd ∨ m ∈ hd' :: tl'
α✝: Type

m: Meas

F: Factory α✝

hd, hd': Meas

tl': List Meas

h✝: Factory.le F hd'.cost hd.cost = true

h: m ∈ dedup F (hd' :: tl')

ih: m ∈ hd' :: tl'


m = hd ∨ m ∈ hd' :: tl'
α✝: Type

m: Meas

F: Factory α✝

hd, hd': Meas

tl': List Meas

ih: m ∈ dedup F (hd' :: tl') β†’ m ∈ hd' :: tl'

h✝: Factory.le F hd'.cost hd.cost = true

h: m ∈ dedup F (hd' :: tl')


m ∈ hd :: hd' :: tl'
α✝: Type

m: Meas

F: Factory α✝

hd, hd': Meas

tl': List Meas

h✝: Factory.le F hd'.cost hd.cost = true

h: m ∈ dedup F (hd' :: tl')

ih: m ∈ hd' :: tl'


h
m ∈ hd' :: tl'
α✝: Type

m: Meas

F: Factory α✝

hd, hd': Meas

tl': List Meas

ih: m ∈ dedup F (hd' :: tl') β†’ m ∈ hd' :: tl'

h✝: Factory.le F hd'.cost hd.cost = true

h: m ∈ dedup F (hd' :: tl')


m ∈ hd :: hd' :: tl'

Goals accomplished! πŸ™
α✝: Type

m: Meas

F: Factory α✝

hd, hd': Meas

tl': List Meas

ih: m ∈ dedup F (hd' :: tl') β†’ m ∈ hd' :: tl'

h: m ∈ dedup F (hd :: hd' :: tl')


m ∈ hd :: hd' :: tl'
α✝: Type

m: Meas

F: Factory α✝

hd, hd': Meas

tl': List Meas

ih: m ∈ dedup F (hd' :: tl') β†’ m ∈ hd' :: tl'

h✝: ¬Factory.le F hd'.cost hd.cost = true

h: m ∈ hd :: dedup F (hd' :: tl')


m ∈ hd :: hd' :: tl'
α✝: Type

m: Meas

F: Factory α✝

hd, hd': Meas

tl': List Meas

ih: m ∈ dedup F (hd' :: tl') β†’ m ∈ hd' :: tl'

h✝: ¬Factory.le F hd'.cost hd.cost = true

h: m = hd ∨ m ∈ dedup F (hd' :: tl')


m ∈ hd :: hd' :: tl'
α✝: Type

m: Meas

F: Factory α✝

hd, hd': Meas

tl': List Meas

ih: m ∈ dedup F (hd' :: tl') β†’ m ∈ hd' :: tl'

h✝: ¬Factory.le F hd'.cost hd.cost = true

h: m ∈ hd :: dedup F (hd' :: tl')


m ∈ hd :: hd' :: tl'
α✝: Type

m: Meas

F: Factory α✝

hd, hd': Meas

tl': List Meas

ih: m ∈ dedup F (hd' :: tl') β†’ m ∈ hd' :: tl'

h✝¹: ¬Factory.le F hd'.cost hd.cost = true

h✝: m = hd


inl
m ∈ hd :: hd' :: tl'
α✝: Type

m: Meas

F: Factory α✝

hd, hd': Meas

tl': List Meas

ih: m ∈ dedup F (hd' :: tl') β†’ m ∈ hd' :: tl'

h✝¹: ¬Factory.le F hd'.cost hd.cost = true

h✝: m ∈ dedup F (hd' :: tl')


inr
m ∈ hd :: hd' :: tl'
α✝: Type

m: Meas

F: Factory α✝

hd, hd': Meas

tl': List Meas

ih: m ∈ dedup F (hd' :: tl') β†’ m ∈ hd' :: tl'

h✝: ¬Factory.le F hd'.cost hd.cost = true

h: m ∈ hd :: dedup F (hd' :: tl')


m ∈ hd :: hd' :: tl'
α✝: Type

m: Meas

F: Factory α✝

hd, hd': Meas

tl': List Meas

ih: m ∈ dedup F (hd' :: tl') β†’ m ∈ hd' :: tl'

h✝: ¬Factory.le F hd'.cost hd.cost = true

h: m = hd


m ∈ hd :: hd' :: tl'

Goals accomplished! πŸ™
α✝: Type

m: Meas

F: Factory α✝

hd, hd': Meas

tl': List Meas

ih: m ∈ dedup F (hd' :: tl') β†’ m ∈ hd' :: tl'

h✝: ¬Factory.le F hd'.cost hd.cost = true

h: m ∈ hd :: dedup F (hd' :: tl')


m ∈ hd :: hd' :: tl'
α✝: Type

m: Meas

F: Factory α✝

hd, hd': Meas

tl': List Meas

ih: m ∈ dedup F (hd' :: tl') β†’ m ∈ hd' :: tl'

h✝: ¬Factory.le F hd'.cost hd.cost = true

h: m ∈ dedup F (hd' :: tl')


m ∈ hd :: hd' :: tl'
α✝: Type

m: Meas

F: Factory α✝

hd, hd': Meas

tl': List Meas

h✝: ¬Factory.le F hd'.cost hd.cost = true

h: m ∈ dedup F (hd' :: tl')

ih: m ∈ hd' :: tl'


m ∈ hd :: hd' :: tl'
α✝: Type

m: Meas

F: Factory α✝

hd, hd': Meas

tl': List Meas

ih: m ∈ dedup F (hd' :: tl') β†’ m ∈ hd' :: tl'

h✝: ¬Factory.le F hd'.cost hd.cost = true

h: m ∈ dedup F (hd' :: tl')


m ∈ hd :: hd' :: tl'
α✝: Type

m: Meas

F: Factory α✝

hd, hd': Meas

tl': List Meas

h✝: ¬Factory.le F hd'.cost hd.cost = true

h: m ∈ dedup F (hd' :: tl')

ih: m ∈ hd' :: tl'


m ∈ hd :: hd' :: tl'
α✝: Type

m: Meas

F: Factory α✝

hd, hd': Meas

tl': List Meas

h✝: ¬Factory.le F hd'.cost hd.cost = true

h: m ∈ dedup F (hd' :: tl')

ih: m ∈ hd' :: tl'


m = hd ∨ m ∈ hd' :: tl'
α✝: Type

m: Meas

F: Factory α✝

hd, hd': Meas

tl': List Meas

h✝: ¬Factory.le F hd'.cost hd.cost = true

h: m ∈ dedup F (hd' :: tl')

ih: m ∈ hd' :: tl'


m = hd ∨ m ∈ hd' :: tl'
α✝: Type

m: Meas

F: Factory α✝

hd, hd': Meas

tl': List Meas

ih: m ∈ dedup F (hd' :: tl') β†’ m ∈ hd' :: tl'

h✝: ¬Factory.le F hd'.cost hd.cost = true

h: m ∈ dedup F (hd' :: tl')


m ∈ hd :: hd' :: tl'
α✝: Type

m: Meas

F: Factory α✝

hd, hd': Meas

tl': List Meas

h✝: ¬Factory.le F hd'.cost hd.cost = true

h: m ∈ dedup F (hd' :: tl')

ih: m ∈ hd' :: tl'


h
m ∈ hd' :: tl'
α✝: Type

m: Meas

F: Factory α✝

hd, hd': Meas

tl': List Meas

ih: m ∈ dedup F (hd' :: tl') β†’ m ∈ hd' :: tl'

h✝: ¬Factory.le F hd'.cost hd.cost = true

h: m ∈ dedup F (hd' :: tl')


m ∈ hd :: hd' :: tl'

Goals accomplished! πŸ™
lemma
dedup_last_first: βˆ€ {Ξ± : Type} {F : Factory Ξ±} {m : Meas} {ms : List Meas} {m' : Meas} {ms' : List Meas}, dedup F (m :: ms) = m' :: ms' β†’ last_decreasing (m :: ms) β†’ m.last β‰₯ m'.last
dedup_last_first
(
h: dedup F (m :: ms) = m' :: ms'
h
:
dedup: {Ξ± : Type} β†’ Factory Ξ± β†’ List Meas β†’ List Meas
dedup
F: ?m.9189
F
(
m: ?m.9200
m
::
ms: ?m.9209
ms
) =
m': ?m.9220
m'
::
ms': ?m.9231
ms'
) (
h_last: last_decreasing (m :: ms)
h_last
:
last_decreasing: {Ξ± : Type} β†’ List Meas β†’ Prop
last_decreasing
(
m: ?m.9200
m
::
ms: ?m.9209
ms
)) :
m: ?m.9200
m
.
last: {Ξ± : Type} β†’ Meas β†’ β„•
last
β‰₯
m': ?m.9220
m'
.
last: {Ξ± : Type} β†’ Meas β†’ β„•
last
:=

Goals accomplished! πŸ™
α✝: Type

F: Factory α✝

m: Meas

ms: List Meas

m': Meas

ms': List Meas

h: dedup F (m :: ms) = m' :: ms'

h_last: last_decreasing (m :: ms)


m.last β‰₯ m'.last
α✝: Type

F: Factory α✝

m': Meas

ms': List Meas

m: Meas

h: dedup F [m] = m' :: ms'

h_last: last_decreasing [m]


nil
m.last β‰₯ m'.last
α✝: Type

F: Factory α✝

m': Meas

ms': List Meas

head✝: Meas

tail✝: List Meas

tail_ih✝: βˆ€ {m : Meas}, dedup F (m :: tail✝) = m' :: ms' β†’ last_decreasing (m :: tail✝) β†’ m.last β‰₯ m'.last

m: Meas

h: dedup F (m :: head✝ :: tail✝) = m' :: ms'

h_last: last_decreasing (m :: head✝ :: tail✝)


cons
m.last β‰₯ m'.last
α✝: Type

F: Factory α✝

m: Meas

ms: List Meas

m': Meas

ms': List Meas

h: dedup F (m :: ms) = m' :: ms'

h_last: last_decreasing (m :: ms)


m.last β‰₯ m'.last
α✝: Type

F: Factory α✝

m': Meas

ms': List Meas

m: Meas

h: dedup F [m] = m' :: ms'

h_last: last_decreasing [m]


m.last β‰₯ m'.last
α✝: Type

F: Factory α✝

m': Meas

ms': List Meas

m: Meas

h_last: last_decreasing [m]

h: m = m' ∧ [] = ms'


m.last β‰₯ m'.last
α✝: Type

F: Factory α✝

m': Meas

ms': List Meas

m: Meas

h: dedup F [m] = m' :: ms'

h_last: last_decreasing [m]


m.last β‰₯ m'.last

Goals accomplished! πŸ™
α✝: Type

F: Factory α✝

m: Meas

ms: List Meas

m': Meas

ms': List Meas

h: dedup F (m :: ms) = m' :: ms'

h_last: last_decreasing (m :: ms)


m.last β‰₯ m'.last
α✝: Type

F: Factory α✝

m': Meas

ms': List Meas

hd: Meas

tl: List Meas

ih: βˆ€ {m : Meas}, dedup F (m :: tl) = m' :: ms' β†’ last_decreasing (m :: tl) β†’ m.last β‰₯ m'.last

m: Meas

h: dedup F (m :: hd :: tl) = m' :: ms'

h_last: last_decreasing (m :: hd :: tl)


m.last β‰₯ m'.last
α✝: Type

F: Factory α✝

m': Meas

ms': List Meas

hd: Meas

tl: List Meas

ih: βˆ€ {m : Meas}, dedup F (m :: tl) = m' :: ms' β†’ last_decreasing (m :: tl) β†’ m.last β‰₯ m'.last

m: Meas

h: (if Factory.le F hd.cost m.cost = true then dedup F (hd :: tl) else m :: dedup F (hd :: tl)) = m' :: ms'

h_last: last_decreasing (m :: hd :: tl)


m.last β‰₯ m'.last
α✝: Type

F: Factory α✝

m': Meas

ms': List Meas

hd: Meas

tl: List Meas

ih: βˆ€ {m : Meas}, dedup F (m :: tl) = m' :: ms' β†’ last_decreasing (m :: tl) β†’ m.last β‰₯ m'.last

m: Meas

h: dedup F (m :: hd :: tl) = m' :: ms'

h_last: last_decreasing (m :: hd :: tl)


m.last β‰₯ m'.last
α✝: Type

F: Factory α✝

m': Meas

ms': List Meas

hd: Meas

tl: List Meas

ih: βˆ€ {m : Meas}, dedup F (m :: tl) = m' :: ms' β†’ last_decreasing (m :: tl) β†’ m.last β‰₯ m'.last

m: Meas

h_last: last_decreasing (m :: hd :: tl)

h✝: Factory.le F hd.cost m.cost = true

h: dedup F (hd :: tl) = m' :: ms'


inl
m.last β‰₯ m'.last
α✝: Type

F: Factory α✝

m': Meas

ms': List Meas

hd: Meas

tl: List Meas

ih: βˆ€ {m : Meas}, dedup F (m :: tl) = m' :: ms' β†’ last_decreasing (m :: tl) β†’ m.last β‰₯ m'.last

m: Meas

h_last: last_decreasing (m :: hd :: tl)

h✝: ¬Factory.le F hd.cost m.cost = true

h: m :: dedup F (hd :: tl) = m' :: ms'


inr
m.last β‰₯ m'.last
α✝: Type

F: Factory α✝

m': Meas

ms': List Meas

hd: Meas

tl: List Meas

ih: βˆ€ {m : Meas}, dedup F (m :: tl) = m' :: ms' β†’ last_decreasing (m :: tl) β†’ m.last β‰₯ m'.last

m: Meas

h: dedup F (m :: hd :: tl) = m' :: ms'

h_last: last_decreasing (m :: hd :: tl)


m.last β‰₯ m'.last
α✝: Type

F: Factory α✝

m': Meas

ms': List Meas

hd: Meas

tl: List Meas

ih: βˆ€ {m : Meas}, dedup F (m :: tl) = m' :: ms' β†’ last_decreasing (m :: tl) β†’ m.last β‰₯ m'.last

m: Meas

h_last: last_decreasing (m :: hd :: tl)

h_if: Factory.le F hd.cost m.cost = true

h: dedup F (hd :: tl) = m' :: ms'


m.last β‰₯ m'.last
α✝: Type

F: Factory α✝

m': Meas

ms': List Meas

hd: Meas

tl: List Meas

m: Meas

h_last: last_decreasing (m :: hd :: tl)

h_if: Factory.le F hd.cost m.cost = true

h: dedup F (hd :: tl) = m' :: ms'

ih: hd.last β‰₯ m'.last


m.last β‰₯ m'.last
α✝: Type

F: Factory α✝

m': Meas

ms': List Meas

hd: Meas

tl: List Meas

ih: βˆ€ {m : Meas}, dedup F (m :: tl) = m' :: ms' β†’ last_decreasing (m :: tl) β†’ m.last β‰₯ m'.last

m: Meas

h_last: last_decreasing (m :: hd :: tl)

h_if: Factory.le F hd.cost m.cost = true

h: dedup F (hd :: tl) = m' :: ms'


m.last β‰₯ m'.last
α✝: Type

F: Factory α✝

m': Meas

ms': List Meas

hd: Meas

tl: List Meas

m: Meas

h_if: Factory.le F hd.cost m.cost = true

h: dedup F (hd :: tl) = m' :: ms'

ih: hd.last β‰₯ m'.last

h_last: m.last > hd.last


m.last β‰₯ m'.last
α✝: Type

F: Factory α✝

m': Meas

ms': List Meas

hd: Meas

tl: List Meas

ih: βˆ€ {m : Meas}, dedup F (m :: tl) = m' :: ms' β†’ last_decreasing (m :: tl) β†’ m.last β‰₯ m'.last

m: Meas

h_last: last_decreasing (m :: hd :: tl)

h_if: Factory.le F hd.cost m.cost = true

h: dedup F (hd :: tl) = m' :: ms'


m.last β‰₯ m'.last
α✝: Type

m', hd, m: Meas

ih: hd.last β‰₯ m'.last

h_last: m.last > hd.last


m.last β‰₯ m'.last
α✝: Type

F: Factory α✝

m': Meas

ms': List Meas

hd: Meas

tl: List Meas

ih: βˆ€ {m : Meas}, dedup F (m :: tl) = m' :: ms' β†’ last_decreasing (m :: tl) β†’ m.last β‰₯ m'.last

m: Meas

h_last: last_decreasing (m :: hd :: tl)

h_if: Factory.le F hd.cost m.cost = true

h: dedup F (hd :: tl) = m' :: ms'


m.last β‰₯ m'.last

Goals accomplished! πŸ™
α✝: Type

F: Factory α✝

m': Meas

ms': List Meas

hd: Meas

tl: List Meas

ih: βˆ€ {m : Meas}, dedup F (m :: tl) = m' :: ms' β†’ last_decreasing (m :: tl) β†’ m.last β‰₯ m'.last

m: Meas

h: dedup F (m :: hd :: tl) = m' :: ms'

h_last: last_decreasing (m :: hd :: tl)


m.last β‰₯ m'.last
α✝: Type

F: Factory α✝

m': Meas

ms': List Meas

hd: Meas

tl: List Meas

ih: βˆ€ {m : Meas}, dedup F (m :: tl) = m' :: ms' β†’ last_decreasing (m :: tl) β†’ m.last β‰₯ m'.last

m: Meas

h_last: last_decreasing (m :: hd :: tl)

h✝: ¬Factory.le F hd.cost m.cost = true

h: m :: dedup F (hd :: tl) = m' :: ms'


m.last β‰₯ m'.last
α✝: Type

F: Factory α✝

m': Meas

ms': List Meas

hd: Meas

tl: List Meas

ih: βˆ€ {m : Meas}, dedup F (m :: tl) = m' :: ms' β†’ last_decreasing (m :: tl) β†’ m.last β‰₯ m'.last

m: Meas

h_last: last_decreasing (m :: hd :: tl)

h✝: ¬Factory.le F hd.cost m.cost = true

h: m = m' ∧ dedup F (hd :: tl) = ms'


m.last β‰₯ m'.last
α✝: Type

F: Factory α✝

m': Meas

ms': List Meas

hd: Meas

tl: List Meas

ih: βˆ€ {m : Meas}, dedup F (m :: tl) = m' :: ms' β†’ last_decreasing (m :: tl) β†’ m.last β‰₯ m'.last

m: Meas

h_last: last_decreasing (m :: hd :: tl)

h✝: ¬Factory.le F hd.cost m.cost = true

h: m :: dedup F (hd :: tl) = m' :: ms'


m.last β‰₯ m'.last

Goals accomplished! πŸ™
lemma
dedup_last_decreasing: βˆ€ {Ξ± : Type} {ms : List Meas} {F : Factory Ξ±}, last_decreasing ms β†’ last_decreasing (dedup F ms)
dedup_last_decreasing
(h :
last_decreasing: {Ξ± : Type} β†’ List Meas β†’ Prop
last_decreasing
ms: ?m.12118
ms
) :
last_decreasing: {Ξ± : Type} β†’ List Meas β†’ Prop
last_decreasing
(
dedup: {Ξ± : Type} β†’ Factory Ξ± β†’ List Meas β†’ List Meas
dedup
F: ?m.12130
F
ms: ?m.12118
ms
) :=

Goals accomplished! πŸ™
α✝: Type

ms: List Meas

F: Factory α✝

h: last_decreasing ms


α✝: Type

F: Factory α✝

h: last_decreasing []


nil
α✝: Type

F: Factory α✝

head✝: Meas

tail✝: List Meas

tail_ih✝: last_decreasing tail✝ β†’ last_decreasing (dedup F tail✝)

h: last_decreasing (head✝ :: tail✝)


cons
last_decreasing (dedup F (head✝ :: tail✝))
α✝: Type

ms: List Meas

F: Factory α✝

h: last_decreasing ms


α✝: Type

F: Factory α✝

h: last_decreasing []



Goals accomplished! πŸ™
α✝: Type

ms: List Meas

F: Factory α✝

h: last_decreasing ms


α✝: Type

F: Factory α✝

x: Meas

tl: List Meas

ih: last_decreasing tl β†’ last_decreasing (dedup F tl)

h: last_decreasing (x :: tl)


α✝: Type

F: Factory α✝

x: Meas

ih: last_decreasing [] β†’ last_decreasing (dedup F [])

h: last_decreasing [x]


nil
α✝: Type

F: Factory α✝

x, head✝: Meas

tail✝: List Meas

ih: last_decreasing (head✝ :: tail✝) β†’ last_decreasing (dedup F (head✝ :: tail✝))

h: last_decreasing (x :: head✝ :: tail✝)


cons
last_decreasing (dedup F (x :: head✝ :: tail✝))
α✝: Type

F: Factory α✝

x: Meas

tl: List Meas

ih: last_decreasing tl β†’ last_decreasing (dedup F tl)

h: last_decreasing (x :: tl)


α✝: Type

F: Factory α✝

x: Meas

ih: last_decreasing [] β†’ last_decreasing (dedup F [])

h: last_decreasing [x]



Goals accomplished! πŸ™
α✝: Type

F: Factory α✝

x: Meas

tl: List Meas

ih: last_decreasing tl β†’ last_decreasing (dedup F tl)

h: last_decreasing (x :: tl)


α✝: Type

F: Factory α✝

x, x': Meas

tl': List Meas

ih: last_decreasing (x' :: tl') β†’ last_decreasing (dedup F (x' :: tl'))

h: last_decreasing (x :: x' :: tl')


last_decreasing (dedup F (x :: x' :: tl'))
α✝: Type

F: Factory α✝

x, x': Meas

tl': List Meas

ih: last_decreasing (x' :: tl') β†’ last_decreasing (dedup F (x' :: tl'))

h: last_decreasing (x :: x' :: tl')


last_decreasing (if Factory.le F x'.cost x.cost = true then dedup F (x' :: tl') else x :: dedup F (x' :: tl'))
α✝: Type

F: Factory α✝

x, x': Meas

tl': List Meas

ih: last_decreasing (x' :: tl') β†’ last_decreasing (dedup F (x' :: tl'))

h: last_decreasing (x :: x' :: tl')


last_decreasing (dedup F (x :: x' :: tl'))
α✝: Type

F: Factory α✝

x, x': Meas

tl': List Meas

ih: last_decreasing (x' :: tl') β†’ last_decreasing (dedup F (x' :: tl'))

h: last_decreasing (x :: x' :: tl')

h✝: Factory.le F x'.cost x.cost = true


inl
last_decreasing (dedup F (x' :: tl'))
α✝: Type

F: Factory α✝

x, x': Meas

tl': List Meas

ih: last_decreasing (x' :: tl') β†’ last_decreasing (dedup F (x' :: tl'))

h: last_decreasing (x :: x' :: tl')

h✝: ¬Factory.le F x'.cost x.cost = true


inr
last_decreasing (x :: dedup F (x' :: tl'))
α✝: Type

F: Factory α✝

x, x': Meas

tl': List Meas

ih: last_decreasing (x' :: tl') β†’ last_decreasing (dedup F (x' :: tl'))

h: last_decreasing (x :: x' :: tl')


last_decreasing (dedup F (x :: x' :: tl'))
α✝: Type

F: Factory α✝

x, x': Meas

tl': List Meas

ih: last_decreasing (x' :: tl') β†’ last_decreasing (dedup F (x' :: tl'))

h: last_decreasing (x :: x' :: tl')

h✝: Factory.le F x'.cost x.cost = true


last_decreasing (dedup F (x' :: tl'))
α✝: Type

F: Factory α✝

x, x': Meas

tl': List Meas

ih: last_decreasing (x' :: tl') β†’ last_decreasing (dedup F (x' :: tl'))

h: last_decreasing (x :: x' :: tl')

h✝: Factory.le F x'.cost x.cost = true


α✝: Type

F: Factory α✝

x, x': Meas

tl': List Meas

ih: last_decreasing (x' :: tl') β†’ last_decreasing (dedup F (x' :: tl'))

h: last_decreasing (x :: x' :: tl')

h✝: Factory.le F x'.cost x.cost = true


last_decreasing (dedup F (x' :: tl'))
α✝: Type

F: Factory α✝

x, x': Meas

tl': List Meas

ih: last_decreasing (x' :: tl') β†’ last_decreasing (dedup F (x' :: tl'))

h: last_decreasing (x :: x' :: tl')

h✝: Factory.le F x'.cost x.cost = true


h
last_decreasing (?x :: x' :: tl')
α✝: Type

F: Factory α✝

x, x': Meas

tl': List Meas

ih: last_decreasing (x' :: tl') β†’ last_decreasing (dedup F (x' :: tl'))

h: last_decreasing (x :: x' :: tl')

h✝: Factory.le F x'.cost x.cost = true


x
Meas
α✝: Type

F: Factory α✝

x, x': Meas

tl': List Meas

ih: last_decreasing (x' :: tl') β†’ last_decreasing (dedup F (x' :: tl'))

h: last_decreasing (x :: x' :: tl')

h✝: Factory.le F x'.cost x.cost = true


last_decreasing (dedup F (x' :: tl'))

Goals accomplished! πŸ™
α✝: Type

F: Factory α✝

x, x': Meas

tl': List Meas

ih: last_decreasing (x' :: tl') β†’ last_decreasing (dedup F (x' :: tl'))

h: last_decreasing (x :: x' :: tl')


last_decreasing (dedup F (x :: x' :: tl'))
α✝: Type

F: Factory α✝

x, x': Meas

tl': List Meas

ih: last_decreasing (x' :: tl') β†’ last_decreasing (dedup F (x' :: tl'))

h: last_decreasing (x :: x' :: tl')

h✝: ¬Factory.le F x'.cost x.cost = true


last_decreasing (x :: dedup F (x' :: tl'))
α✝: Type

F: Factory α✝

x, x': Meas

tl': List Meas

ih: last_decreasing (x' :: tl') β†’ last_decreasing (dedup F (x' :: tl'))

h: last_decreasing (x :: x' :: tl')

h✝: ¬Factory.le F x'.cost x.cost = true

h_case: dedup F (x' :: tl') = []


nil
α✝: Type

F: Factory α✝

x, x': Meas

tl': List Meas

ih: last_decreasing (x' :: tl') β†’ last_decreasing (dedup F (x' :: tl'))

h: last_decreasing (x :: x' :: tl')

h✝: ¬Factory.le F x'.cost x.cost = true

head✝: Meas

tail✝: List Meas

h_case: dedup F (x' :: tl') = head✝ :: tail✝


cons
last_decreasing (x :: head✝ :: tail✝)
α✝: Type

F: Factory α✝

x, x': Meas

tl': List Meas

ih: last_decreasing (x' :: tl') β†’ last_decreasing (dedup F (x' :: tl'))

h: last_decreasing (x :: x' :: tl')

h✝: ¬Factory.le F x'.cost x.cost = true


last_decreasing (x :: dedup F (x' :: tl'))
α✝: Type

F: Factory α✝

x, x': Meas

tl': List Meas

ih: last_decreasing (x' :: tl') β†’ last_decreasing (dedup F (x' :: tl'))

h: last_decreasing (x :: x' :: tl')

h✝: ¬Factory.le F x'.cost x.cost = true

h_case: dedup F (x' :: tl') = []



Goals accomplished! πŸ™
α✝: Type

F: Factory α✝

x, x': Meas

tl': List Meas

ih: last_decreasing (x' :: tl') β†’ last_decreasing (dedup F (x' :: tl'))

h: last_decreasing (x :: x' :: tl')

h✝: ¬Factory.le F x'.cost x.cost = true


last_decreasing (x :: dedup F (x' :: tl'))
α✝: Type

F: Factory α✝

x, x': Meas

tl': List Meas

ih: last_decreasing (x' :: tl') β†’ last_decreasing (dedup F (x' :: tl'))

h: last_decreasing (x :: x' :: tl')

h✝: ¬Factory.le F x'.cost x.cost = true

head✝: Meas

tail✝: List Meas

h_case: dedup F (x' :: tl') = head✝ :: tail✝


last_decreasing (x :: head✝ :: tail✝)
α✝: Type

F: Factory α✝

x, x': Meas

tl': List Meas

ih: last_decreasing (x' :: tl') β†’ last_decreasing (dedup F (x' :: tl'))

h: last_decreasing (x :: x' :: tl')

h✝: ¬Factory.le F x'.cost x.cost = true

head✝: Meas

tail✝: List Meas

h_case: dedup F (x' :: tl') = head✝ :: tail✝


last_decreasing (x :: head✝ :: tail✝)
α✝: Type

F: Factory α✝

x, x': Meas

tl': List Meas

h: last_decreasing (x :: x' :: tl')

h✝: ¬Factory.le F x'.cost x.cost = true

head✝: Meas

tail✝: List Meas

ih: last_decreasing (x' :: tl') β†’ last_decreasing (head✝ :: tail✝)

h_case: dedup F (x' :: tl') = head✝ :: tail✝


last_decreasing (x :: head✝ :: tail✝)
α✝: Type

F: Factory α✝

x, x': Meas

tl': List Meas

h: last_decreasing (x :: x' :: tl')

h✝: ¬Factory.le F x'.cost x.cost = true

head✝: Meas

tail✝: List Meas

ih: last_decreasing (x' :: tl') β†’ last_decreasing (head✝ :: tail✝)

h_case: dedup F (x' :: tl') = head✝ :: tail✝


last_decreasing (x :: head✝ :: tail✝)
α✝: Type

F: Factory α✝

x, x': Meas

tl': List Meas

h: last_decreasing (x :: x' :: tl')

h✝: ¬Factory.le F x'.cost x.cost = true

head✝: Meas

tail✝: List Meas

ih: last_decreasing (x' :: tl') β†’ last_decreasing (head✝ :: tail✝)

h_case: dedup F (x' :: tl') = head✝ :: tail✝


last_decreasing (x :: head✝ :: tail✝)
α✝: Type

F: Factory α✝

x, x': Meas

tl': List Meas

ih: last_decreasing (x' :: tl') β†’ last_decreasing (dedup F (x' :: tl'))

h: last_decreasing (x :: x' :: tl')

h✝: ¬Factory.le F x'.cost x.cost = true

head✝: Meas

tail✝: List Meas

h_case: dedup F (x' :: tl') = head✝ :: tail✝


last_decreasing (x :: head✝ :: tail✝)
α✝: Type

F: Factory α✝

x, x': Meas

tl': List Meas

h: last_decreasing (x :: x' :: tl')

h✝: ¬Factory.le F x'.cost x.cost = true

head✝: Meas

tail✝: List Meas

ih: last_decreasing (x' :: tl') β†’ last_decreasing (head✝ :: tail✝)

h_case: dedup F (x' :: tl') = head✝ :: tail✝


h_last
x.last > head✝.last
α✝: Type

F: Factory α✝

x, x': Meas

tl': List Meas

h: last_decreasing (x :: x' :: tl')

h✝: ¬Factory.le F x'.cost x.cost = true

head✝: Meas

tail✝: List Meas

ih: last_decreasing (x' :: tl') β†’ last_decreasing (head✝ :: tail✝)

h_case: dedup F (x' :: tl') = head✝ :: tail✝


h
last_decreasing (head✝ :: tail✝)
α✝: Type

F: Factory α✝

x, x': Meas

tl': List Meas

ih: last_decreasing (x' :: tl') β†’ last_decreasing (dedup F (x' :: tl'))

h: last_decreasing (x :: x' :: tl')

h✝: ¬Factory.le F x'.cost x.cost = true

head✝: Meas

tail✝: List Meas

h_case: dedup F (x' :: tl') = head✝ :: tail✝


last_decreasing (x :: head✝ :: tail✝)
α✝: Type

F: Factory α✝

x, x': Meas

tl': List Meas

h: last_decreasing (x :: x' :: tl')

h✝: ¬Factory.le F x'.cost x.cost = true

head✝: Meas

tail✝: List Meas

ih: last_decreasing (x' :: tl') β†’ last_decreasing (head✝ :: tail✝)

h_case: dedup F (x' :: tl') = head✝ :: tail✝


x.last > head✝.last
α✝: Type

F: Factory α✝

x, x': Meas

tl': List Meas

h: last_decreasing (x :: x' :: tl')

h✝: ¬Factory.le F x'.cost x.cost = true

head✝: Meas

tail✝: List Meas

ih: last_decreasing (x' :: tl') β†’ last_decreasing (head✝ :: tail✝)

h_case: x'.last β‰₯ head✝.last


x.last > head✝.last
α✝: Type

F: Factory α✝

x, x': Meas

tl': List Meas

h: last_decreasing (x :: x' :: tl')

h✝: ¬Factory.le F x'.cost x.cost = true

head✝: Meas

tail✝: List Meas

ih: last_decreasing (x' :: tl') β†’ last_decreasing (head✝ :: tail✝)

h_case: dedup F (x' :: tl') = head✝ :: tail✝


x.last > head✝.last
α✝: Type

F: Factory α✝

x, x': Meas

tl': List Meas

h: last_decreasing (x :: x' :: tl')

h✝: ¬Factory.le F x'.cost x.cost = true

head✝: Meas

tail✝: List Meas

ih: last_decreasing (x' :: tl') β†’ last_decreasing (head✝ :: tail✝)

h_case: head✝.last ≀ x'.last


head✝.last < x.last
α✝: Type

F: Factory α✝

x, x': Meas

tl': List Meas

h: last_decreasing (x :: x' :: tl')

h✝: ¬Factory.le F x'.cost x.cost = true

head✝: Meas

tail✝: List Meas

ih: last_decreasing (x' :: tl') β†’ last_decreasing (head✝ :: tail✝)

h_case: dedup F (x' :: tl') = head✝ :: tail✝


x.last > head✝.last
α✝: Type

F: Factory α✝

x, x': Meas

tl': List Meas

h✝: ¬Factory.le F x'.cost x.cost = true

head✝: Meas

tail✝: List Meas

ih: last_decreasing (x' :: tl') β†’ last_decreasing (head✝ :: tail✝)

h_case: head✝.last ≀ x'.last

h: x.last > x'.last


head✝.last < x.last
α✝: Type

F: Factory α✝

x, x': Meas

tl': List Meas

h: last_decreasing (x :: x' :: tl')

h✝: ¬Factory.le F x'.cost x.cost = true

head✝: Meas

tail✝: List Meas

ih: last_decreasing (x' :: tl') β†’ last_decreasing (head✝ :: tail✝)

h_case: dedup F (x' :: tl') = head✝ :: tail✝


x.last > head✝.last
α✝: Type

F: Factory α✝

x, x': Meas

tl': List Meas

h✝: ¬Factory.le F x'.cost x.cost = true

head✝: Meas

tail✝: List Meas

ih: last_decreasing (x' :: tl') β†’ last_decreasing (head✝ :: tail✝)

h_case: head✝.last ≀ x'.last

h: x'.last < x.last


head✝.last < x.last
α✝: Type

F: Factory α✝

x, x': Meas

tl': List Meas

h: last_decreasing (x :: x' :: tl')

h✝: ¬Factory.le F x'.cost x.cost = true

head✝: Meas

tail✝: List Meas

ih: last_decreasing (x' :: tl') β†’ last_decreasing (head✝ :: tail✝)

h_case: dedup F (x' :: tl') = head✝ :: tail✝


x.last > head✝.last
α✝: Type

x, x', head✝: Meas

h_case: head✝.last ≀ x'.last

h: x'.last < x.last


head✝.last < x.last
α✝: Type

F: Factory α✝

x, x': Meas

tl': List Meas

h: last_decreasing (x :: x' :: tl')

h✝: ¬Factory.le F x'.cost x.cost = true

head✝: Meas

tail✝: List Meas

ih: last_decreasing (x' :: tl') β†’ last_decreasing (head✝ :: tail✝)

h_case: dedup F (x' :: tl') = head✝ :: tail✝


x.last > head✝.last

Goals accomplished! πŸ™
α✝: Type

F: Factory α✝

x, x': Meas

tl': List Meas

ih: last_decreasing (x' :: tl') β†’ last_decreasing (dedup F (x' :: tl'))

h: last_decreasing (x :: x' :: tl')

h✝: ¬Factory.le F x'.cost x.cost = true

head✝: Meas

tail✝: List Meas

h_case: dedup F (x' :: tl') = head✝ :: tail✝


last_decreasing (x :: head✝ :: tail✝)
α✝: Type

F: Factory α✝

x, x': Meas

tl': List Meas

h: last_decreasing (x :: x' :: tl')

h✝: ¬Factory.le F x'.cost x.cost = true

head✝: Meas

tail✝: List Meas

ih: last_decreasing (x' :: tl') β†’ last_decreasing (head✝ :: tail✝)

h_case: dedup F (x' :: tl') = head✝ :: tail✝


last_decreasing (head✝ :: tail✝)
α✝: Type

F: Factory α✝

x, x': Meas

tl': List Meas

h: last_decreasing (x :: x' :: tl')

h✝: ¬Factory.le F x'.cost x.cost = true

head✝: Meas

tail✝: List Meas

ih: last_decreasing (x' :: tl') β†’ last_decreasing (head✝ :: tail✝)

h_case: dedup F (x' :: tl') = head✝ :: tail✝


α✝: Type

F: Factory α✝

x, x': Meas

tl': List Meas

h: last_decreasing (x :: x' :: tl')

h✝: ¬Factory.le F x'.cost x.cost = true

head✝: Meas

tail✝: List Meas

ih: last_decreasing (x' :: tl') β†’ last_decreasing (head✝ :: tail✝)

h_case: dedup F (x' :: tl') = head✝ :: tail✝


last_decreasing (head✝ :: tail✝)
α✝: Type

F: Factory α✝

x, x': Meas

tl': List Meas

h: last_decreasing (x :: x' :: tl')

h✝: ¬Factory.le F x'.cost x.cost = true

head✝: Meas

tail✝: List Meas

ih: last_decreasing (x' :: tl') β†’ last_decreasing (head✝ :: tail✝)

h_case: dedup F (x' :: tl') = head✝ :: tail✝


h
last_decreasing (?x :: x' :: tl')
α✝: Type

F: Factory α✝

x, x': Meas

tl': List Meas

h: last_decreasing (x :: x' :: tl')

h✝: ¬Factory.le F x'.cost x.cost = true

head✝: Meas

tail✝: List Meas

ih: last_decreasing (x' :: tl') β†’ last_decreasing (head✝ :: tail✝)

h_case: dedup F (x' :: tl') = head✝ :: tail✝


x
Meas
α✝: Type

F: Factory α✝

x, x': Meas

tl': List Meas

h: last_decreasing (x :: x' :: tl')

h✝: ¬Factory.le F x'.cost x.cost = true

head✝: Meas

tail✝: List Meas

ih: last_decreasing (x' :: tl') β†’ last_decreasing (head✝ :: tail✝)

h_case: dedup F (x' :: tl') = head✝ :: tail✝


last_decreasing (head✝ :: tail✝)

Goals accomplished! πŸ™
lemma
dedup_cost_first: βˆ€ {Ξ± : Type} {F : Factory Ξ±} {m : Meas} {ms : List Meas} {m' : Meas} {ms' : List Meas}, dedup F (m :: ms) = m' :: ms' β†’ cost_increasing_non_strict F (m :: ms) β†’ m.cost = m'.cost
dedup_cost_first
(
h: dedup F (m :: ms) = m' :: ms'
h
:
dedup: {Ξ± : Type} β†’ Factory Ξ± β†’ List Meas β†’ List Meas
dedup
F: ?m.15325
F
(
m: ?m.15336
m
::
ms: ?m.15345
ms
) =
m': ?m.15356
m'
::
ms': ?m.15367
ms'
) (h_last :
cost_increasing_non_strict: {Ξ± : Type} β†’ Factory Ξ± β†’ List Meas β†’ Prop
cost_increasing_non_strict
F: ?m.15325
F
(
m: ?m.15336
m
::
ms: ?m.15345
ms
)) :
m: ?m.15336
m
.
cost: {Ξ± : Type} β†’ Meas β†’ Ξ±
cost
=
m': ?m.15356
m'
.
cost: {Ξ± : Type} β†’ Meas β†’ Ξ±
cost
:=

Goals accomplished! πŸ™
α✝: Type

F: Factory α✝

m: Meas

ms: List Meas

m': Meas

ms': List Meas

h: dedup F (m :: ms) = m' :: ms'

h_last: cost_increasing_non_strict F (m :: ms)


m.cost = m'.cost
α✝: Type

F: Factory α✝

m': Meas

ms': List Meas

m: Meas

h: dedup F [m] = m' :: ms'

h_last: cost_increasing_non_strict F [m]


nil
m.cost = m'.cost
α✝: Type

F: Factory α✝

m': Meas

ms': List Meas

head✝: Meas

tail✝: List Meas

tail_ih✝: βˆ€ {m : Meas}, dedup F (m :: tail✝) = m' :: ms' β†’ cost_increasing_non_strict F (m :: tail✝) β†’ m.cost = m'.cost

m: Meas

h: dedup F (m :: head✝ :: tail✝) = m' :: ms'

h_last: cost_increasing_non_strict F (m :: head✝ :: tail✝)


cons
m.cost = m'.cost
α✝: Type

F: Factory α✝

m: Meas

ms: List Meas

m': Meas

ms': List Meas

h: dedup F (m :: ms) = m' :: ms'

h_last: cost_increasing_non_strict F (m :: ms)


m.cost = m'.cost
α✝: Type

F: Factory α✝

m': Meas

ms': List Meas

m: Meas

h: dedup F [m] = m' :: ms'

h_last: cost_increasing_non_strict F [m]


m.cost = m'.cost
α✝: Type

F: Factory α✝

m': Meas

ms': List Meas

m: Meas

h_last: cost_increasing_non_strict F [m]

h: m = m' ∧ [] = ms'


m.cost = m'.cost
α✝: Type

F: Factory α✝

m': Meas

ms': List Meas

m: Meas

h: dedup F [m] = m' :: ms'

h_last: cost_increasing_non_strict F [m]


m.cost = m'.cost

Goals accomplished! πŸ™
α✝: Type

F: Factory α✝

m: Meas

ms: List Meas

m': Meas

ms': List Meas

h: dedup F (m :: ms) = m' :: ms'

h_last: cost_increasing_non_strict F (m :: ms)


m.cost = m'.cost
α✝: Type

F: Factory α✝

m': Meas

ms': List Meas

hd: Meas

tl: List Meas

ih: βˆ€ {m : Meas}, dedup F (m :: tl) = m' :: ms' β†’ cost_increasing_non_strict F (m :: tl) β†’ m.cost = m'.cost

m: Meas

h: dedup F (m :: hd :: tl) = m' :: ms'

h_last: cost_increasing_non_strict F (m :: hd :: tl)


m.cost = m'.cost
α✝: Type

F: Factory α✝

m': Meas

ms': List Meas

hd: Meas

tl: List Meas

ih: βˆ€ {m : Meas}, dedup F (m :: tl) = m' :: ms' β†’ cost_increasing_non_strict F (m :: tl) β†’ m.cost = m'.cost

m: Meas

h: (if Factory.le F hd.cost m.cost = true then dedup F (hd :: tl) else m :: dedup F (hd :: tl)) = m' :: ms'

h_last: cost_increasing_non_strict F (m :: hd :: tl)


m.cost = m'.cost
α✝: Type

F: Factory α✝

m': Meas

ms': List Meas

hd: Meas

tl: List Meas

ih: βˆ€ {m : Meas}, dedup F (m :: tl) = m' :: ms' β†’ cost_increasing_non_strict F (m :: tl) β†’ m.cost = m'.cost

m: Meas

h: dedup F (m :: hd :: tl) = m' :: ms'

h_last: cost_increasing_non_strict F (m :: hd :: tl)


m.cost = m'.cost
α✝: Type

F: Factory α✝

m': Meas

ms': List Meas

hd: Meas

tl: List Meas

ih: βˆ€ {m : Meas}, dedup F (m :: tl) = m' :: ms' β†’ cost_increasing_non_strict F (m :: tl) β†’ m.cost = m'.cost

m: Meas

h_last: cost_increasing_non_strict F (m :: hd :: tl)

h✝: Factory.le F hd.cost m.cost = true

h: dedup F (hd :: tl) = m' :: ms'


inl
m.cost = m'.cost
α✝: Type

F: Factory α✝

m': Meas

ms': List Meas

hd: Meas

tl: List Meas

ih: βˆ€ {m : Meas}, dedup F (m :: tl) = m' :: ms' β†’ cost_increasing_non_strict F (m :: tl) β†’ m.cost = m'.cost

m: Meas

h_last: cost_increasing_non_strict F (m :: hd :: tl)

h✝: ¬Factory.le F hd.cost m.cost = true

h: m :: dedup F (hd :: tl) = m' :: ms'


inr
m.cost = m'.cost
α✝: Type

F: Factory α✝

m': Meas

ms': List Meas

hd: Meas

tl: List Meas

ih: βˆ€ {m : Meas}, dedup F (m :: tl) = m' :: ms' β†’ cost_increasing_non_strict F (m :: tl) β†’ m.cost = m'.cost

m: Meas

h: dedup F (m :: hd :: tl) = m' :: ms'

h_last: cost_increasing_non_strict F (m :: hd :: tl)


m.cost = m'.cost
α✝: Type

F: Factory α✝

m': Meas

ms': List Meas

hd: Meas

tl: List Meas

ih: βˆ€ {m : Meas}, dedup F (m :: tl) = m' :: ms' β†’ cost_increasing_non_strict F (m :: tl) β†’ m.cost = m'.cost

m: Meas

h_last: cost_increasing_non_strict F (m :: hd :: tl)

h_if: Factory.le F hd.cost m.cost = true

h: dedup F (hd :: tl) = m' :: ms'


m.cost = m'.cost
α✝: Type

F: Factory α✝

m': Meas

ms': List Meas

hd: Meas

tl: List Meas

m: Meas

h_last: cost_increasing_non_strict F (m :: hd :: tl)

h_if: Factory.le F hd.cost m.cost = true

h: dedup F (hd :: tl) = m' :: ms'

ih: hd.cost = m'.cost


m.cost = m'.cost
α✝: Type

F: Factory α✝

m': Meas

ms': List Meas

hd: Meas

tl: List Meas

ih: βˆ€ {m : Meas}, dedup F (m :: tl) = m' :: ms' β†’ cost_increasing_non_strict F (m :: tl) β†’ m.cost = m'.cost

m: Meas

h_last: cost_increasing_non_strict F (m :: hd :: tl)

h_if: Factory.le F hd.cost m.cost = true

h: dedup F (hd :: tl) = m' :: ms'


m.cost = m'.cost
α✝: Type

F: Factory α✝

m': Meas

ms': List Meas

hd: Meas

tl: List Meas

m: Meas

h_if: Factory.le F hd.cost m.cost = true

h: dedup F (hd :: tl) = m' :: ms'

ih: hd.cost = m'.cost

h_last: Factory.le F m.cost hd.cost = true


m.cost = m'.cost
α✝: Type

F: Factory α✝

m': Meas

ms': List Meas

hd: Meas

tl: List Meas

ih: βˆ€ {m : Meas}, dedup F (m :: tl) = m' :: ms' β†’ cost_increasing_non_strict F (m :: tl) β†’ m.cost = m'.cost

m: Meas

h_last: cost_increasing_non_strict F (m :: hd :: tl)

h_if: Factory.le F hd.cost m.cost = true

h: dedup F (hd :: tl) = m' :: ms'


m.cost = m'.cost
α✝: Type

F: Factory α✝

m': Meas

ms': List Meas

hd: Meas

tl: List Meas

m: Meas

h_if: Factory.le F hd.cost m.cost = true

h: dedup F (hd :: tl) = m' :: ms'

ih: hd.cost = m'.cost

h_last: Factory.le F m.cost hd.cost = true

this: m.cost = hd.cost


m.cost = m'.cost
α✝: Type

F: Factory α✝

m': Meas

ms': List Meas

hd: Meas

tl: List Meas

ih: βˆ€ {m : Meas}, dedup F (m :: tl) = m' :: ms' β†’ cost_increasing_non_strict F (m :: tl) β†’ m.cost = m'.cost

m: Meas

h_last: cost_increasing_non_strict F (m :: hd :: tl)

h_if: Factory.le F hd.cost m.cost = true

h: dedup F (hd :: tl) = m' :: ms'


m.cost = m'.cost
α✝: Type

F: Factory α✝

m': Meas

ms': List Meas

hd: Meas

tl: List Meas

m: Meas

h_if: Factory.le F hd.cost m.cost = true

h: dedup F (hd :: tl) = m' :: ms'

ih: hd.cost = m'.cost

h_last: Factory.le F m.cost hd.cost = true

this: m.cost = hd.cost


m.cost = m'.cost
α✝: Type

F: Factory α✝

m': Meas

ms': List Meas

hd: Meas

tl: List Meas

m: Meas

h_if: Factory.le F hd.cost m.cost = true

h: dedup F (hd :: tl) = m' :: ms'

ih: hd.cost = m'.cost

h_last: Factory.le F m.cost hd.cost = true

this: m.cost = hd.cost


hd.cost = m'.cost
α✝: Type

F: Factory α✝

m': Meas

ms': List Meas

hd: Meas

tl: List Meas

m: Meas

h_if: Factory.le F hd.cost m.cost = true

h: dedup F (hd :: tl) = m' :: ms'

ih: hd.cost = m'.cost

h_last: Factory.le F m.cost hd.cost = true

this: m.cost = hd.cost


m.cost = m'.cost
α✝: Type

F: Factory α✝

m': Meas

ms': List Meas

hd: Meas

tl: List Meas

m: Meas

h_if: Factory.le F hd.cost m.cost = true

h: dedup F (hd :: tl) = m' :: ms'

ih: hd.cost = m'.cost

h_last: Factory.le F m.cost hd.cost = true

this: m.cost = hd.cost


m'.cost = m'.cost

Goals accomplished! πŸ™
α✝: Type

F: Factory α✝

m': Meas

ms': List Meas

hd: Meas

tl: List Meas

ih: βˆ€ {m : Meas}, dedup F (m :: tl) = m' :: ms' β†’ cost_increasing_non_strict F (m :: tl) β†’ m.cost = m'.cost

m: Meas

h: dedup F (m :: hd :: tl) = m' :: ms'

h_last: cost_increasing_non_strict F (m :: hd :: tl)


m.cost = m'.cost
α✝: Type

F: Factory α✝

m': Meas

ms': List Meas

hd: Meas

tl: List Meas

ih: βˆ€ {m : Meas}, dedup F (m :: tl) = m' :: ms' β†’ cost_increasing_non_strict F (m :: tl) β†’ m.cost = m'.cost

m: Meas

h_last: cost_increasing_non_strict F (m :: hd :: tl)

h✝: ¬Factory.le F hd.cost m.cost = true

h: m :: dedup F (hd :: tl) = m' :: ms'


m.cost = m'.cost
α✝: Type

F: Factory α✝

m': Meas

ms': List Meas

hd: Meas

tl: List Meas

ih: βˆ€ {m : Meas}, dedup F (m :: tl) = m' :: ms' β†’ cost_increasing_non_strict F (m :: tl) β†’ m.cost = m'.cost

m: Meas

h_last: cost_increasing_non_strict F (m :: hd :: tl)

h✝: ¬Factory.le F hd.cost m.cost = true

h: m = m' ∧ dedup F (hd :: tl) = ms'


m.cost = m'.cost
α✝: Type

F: Factory α✝

m': Meas

ms': List Meas

hd: Meas

tl: List Meas

ih: βˆ€ {m : Meas}, dedup F (m :: tl) = m' :: ms' β†’ cost_increasing_non_strict F (m :: tl) β†’ m.cost = m'.cost

m: Meas

h_last: cost_increasing_non_strict F (m :: hd :: tl)

h✝: ¬Factory.le F hd.cost m.cost = true

h: m :: dedup F (hd :: tl) = m' :: ms'


m.cost = m'.cost

Goals accomplished! πŸ™
lemma
dedup_cost_increasing: βˆ€ {Ξ± : Type} {F : Factory Ξ±} {ms : List Meas}, cost_increasing_non_strict F ms β†’ cost_increasing F (dedup F ms)
dedup_cost_increasing
(h :
cost_increasing_non_strict: {Ξ± : Type} β†’ Factory Ξ± β†’ List Meas β†’ Prop
cost_increasing_non_strict
F: ?m.16376
F
ms: ?m.16383
ms
) :
cost_increasing: {Ξ± : Type} β†’ Factory Ξ± β†’ List Meas β†’ Prop
cost_increasing
F: ?m.16376
F
(
dedup: {Ξ± : Type} β†’ Factory Ξ± β†’ List Meas β†’ List Meas
dedup
F: ?m.16376
F
ms: ?m.16383
ms
) :=

Goals accomplished! πŸ™
α✝: Type

F: Factory α✝

ms: List Meas

h: cost_increasing_non_strict F ms


α✝: Type

F: Factory α✝

h: cost_increasing_non_strict F []


nil
α✝: Type

F: Factory α✝

head✝: Meas

tail✝: List Meas

tail_ih✝: cost_increasing_non_strict F tail✝ β†’ cost_increasing F (dedup F tail✝)

h: cost_increasing_non_strict F (head✝ :: tail✝)


cons
cost_increasing F (dedup F (head✝ :: tail✝))
α✝: Type

F: Factory α✝

ms: List Meas

h: cost_increasing_non_strict F ms


α✝: Type

F: Factory α✝

h: cost_increasing_non_strict F []


α✝: Type

F: Factory α✝

h: cost_increasing_non_strict F []

i: β„•

hi: i < List.length (dedup F [])

hj: i + 1 < List.length (dedup F [])


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

F: Factory α✝

h: cost_increasing_non_strict F []



Goals accomplished! πŸ™
α✝: Type

F: Factory α✝

ms: List Meas

h: cost_increasing_non_strict F ms


α✝: Type

F: Factory α✝

x: Meas

tl: List Meas

ih: cost_increasing_non_strict F tl β†’ cost_increasing F (dedup F tl)

h: cost_increasing_non_strict F (x :: tl)


cost_increasing F (dedup F (x :: tl))
α✝: Type

F: Factory α✝

x: Meas

ih: cost_increasing_non_strict F [] β†’ cost_increasing F (dedup F [])

h: cost_increasing_non_strict F [x]


nil
α✝: Type

F: Factory α✝

x, head✝: Meas

tail✝: List Meas

ih: cost_increasing_non_strict F (head✝ :: tail✝) β†’ cost_increasing F (dedup F (head✝ :: tail✝))

h: cost_increasing_non_strict F (x :: head✝ :: tail✝)


cons
cost_increasing F (dedup F (x :: head✝ :: tail✝))
α✝: Type

F: Factory α✝

x: Meas

tl: List Meas

ih: cost_increasing_non_strict F tl β†’ cost_increasing F (dedup F tl)

h: cost_increasing_non_strict F (x :: tl)


cost_increasing F (dedup F (x :: tl))
α✝: Type

F: Factory α✝

x: Meas

ih: cost_increasing_non_strict F [] β†’ cost_increasing F (dedup F [])

h: cost_increasing_non_strict F [x]


α✝: Type

F: Factory α✝

x: Meas

ih: cost_increasing_non_strict F [] β†’ cost_increasing F (dedup F [])

h: cost_increasing_non_strict F [x]


α✝: Type

F: Factory α✝

x: Meas

ih: cost_increasing_non_strict F [] β†’ cost_increasing F (dedup F [])

h: cost_increasing_non_strict F [x]



Goals accomplished! πŸ™
α✝: Type

F: Factory α✝

x: Meas

tl: List Meas

ih: cost_increasing_non_strict F tl β†’ cost_increasing F (dedup F tl)

h: cost_increasing_non_strict F (x :: tl)


cost_increasing F (dedup F (x :: tl))
α✝: Type

F: Factory α✝

x, y: Meas

tl: List Meas

ih: cost_increasing_non_strict F (y :: tl) β†’ cost_increasing F (dedup F (y :: tl))

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


cost_increasing F (dedup F (x :: y :: tl))
α✝: Type

F: Factory α✝

x, y: Meas

tl: List Meas

ih: cost_increasing_non_strict F (y :: tl) β†’ cost_increasing F (dedup F (y :: tl))

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


cost_increasing F (if Factory.le F y.cost x.cost = true then dedup F (y :: tl) else x :: dedup F (y :: tl))
α✝: Type

F: Factory α✝

x, y: Meas

tl: List Meas

ih: cost_increasing_non_strict F (y :: tl) β†’ cost_increasing F (dedup F (y :: tl))

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


cost_increasing F (dedup F (x :: y :: tl))
α✝: Type

F: Factory α✝

x, y: Meas

tl: List Meas

ih: cost_increasing_non_strict F (y :: tl) β†’ cost_increasing F (dedup F (y :: tl))

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

h✝: Factory.le F y.cost x.cost = true


inl
cost_increasing F (dedup F (y :: tl))
α✝: Type

F: Factory α✝

x, y: Meas

tl: List Meas

ih: cost_increasing_non_strict F (y :: tl) β†’ cost_increasing F (dedup F (y :: tl))

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

h✝: ¬Factory.le F y.cost x.cost = true


inr
cost_increasing F (x :: dedup F (y :: tl))
α✝: Type

F: Factory α✝

x, y: Meas

tl: List Meas

ih: cost_increasing_non_strict F (y :: tl) β†’ cost_increasing F (dedup F (y :: tl))

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


cost_increasing F (dedup F (x :: y :: tl))
α✝: Type

F: Factory α✝

x, y: Meas

tl: List Meas

ih: cost_increasing_non_strict F (y :: tl) β†’ cost_increasing F (dedup F (y :: tl))

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

h✝: Factory.le F y.cost x.cost = true


cost_increasing F (dedup F (y :: tl))
α✝: Type

F: Factory α✝

x, y: Meas

tl: List Meas

ih: cost_increasing_non_strict F (y :: tl) β†’ cost_increasing F (dedup F (y :: tl))

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

h✝: Factory.le F y.cost x.cost = true


α✝: Type

F: Factory α✝

x, y: Meas

tl: List Meas

ih: cost_increasing_non_strict F (y :: tl) β†’ cost_increasing F (dedup F (y :: tl))

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

h✝: Factory.le F y.cost x.cost = true


cost_increasing F (dedup F (y :: tl))
α✝: Type

F: Factory α✝

x, y: Meas

tl: List Meas

ih: cost_increasing_non_strict F (y :: tl) β†’ cost_increasing F (dedup F (y :: tl))

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

h✝: Factory.le F y.cost x.cost = true


h
α✝: Type

F: Factory α✝

x, y: Meas

tl: List Meas

ih: cost_increasing_non_strict F (y :: tl) β†’ cost_increasing F (dedup F (y :: tl))

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

h✝: Factory.le F y.cost x.cost = true


x
Meas
α✝: Type

F: Factory α✝

x, y: Meas

tl: List Meas

ih: cost_increasing_non_strict F (y :: tl) β†’ cost_increasing F (dedup F (y :: tl))

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

h✝: Factory.le F y.cost x.cost = true


cost_increasing F (dedup F (y :: tl))

Goals accomplished! πŸ™
α✝: Type

F: Factory α✝

x, y: Meas

tl: List Meas

ih: cost_increasing_non_strict F (y :: tl) β†’ cost_increasing F (dedup F (y :: tl))

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


cost_increasing F (dedup F (x :: y :: tl))
α✝: Type

F: Factory α✝

x, y: Meas

tl: List Meas

ih: cost_increasing_non_strict F (y :: tl) β†’ cost_increasing F (dedup F (y :: tl))

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

h_if: Β¬Factory.le F y.cost x.cost = true


cost_increasing F (x :: dedup F (y :: tl))
α✝: Type

F: Factory α✝

x, y: Meas

tl: List Meas

ih: cost_increasing_non_strict F (y :: tl) β†’ cost_increasing F (dedup F (y :: tl))

h_if: Β¬Factory.le F y.cost x.cost = true

h: cost_increasing_non_strict F (y :: tl)


cost_increasing F (x :: dedup F (y :: tl))
α✝: Type

F: Factory α✝

x, y: Meas

tl: List Meas

ih: cost_increasing_non_strict F (y :: tl) β†’ cost_increasing F (dedup F (y :: tl))

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

h_if: Β¬Factory.le F y.cost x.cost = true


cost_increasing F (x :: dedup F (y :: tl))
α✝: Type

F: Factory α✝

x, y: Meas

tl: List Meas

h_if: Β¬Factory.le F y.cost x.cost = true

h: cost_increasing_non_strict F (y :: tl)

ih: cost_increasing F (dedup F (y :: tl))


cost_increasing F (x :: dedup F (y :: tl))
α✝: Type

F: Factory α✝

x, y: Meas

tl: List Meas

ih: cost_increasing_non_strict F (y :: tl) β†’ cost_increasing F (dedup F (y :: tl))

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

h_if: Β¬Factory.le F y.cost x.cost = true


cost_increasing F (x :: dedup F (y :: tl))
α✝: Type

F: Factory α✝

x, y: Meas

tl: List Meas

h_if: Β¬Factory.le F y.cost x.cost = true

h: cost_increasing_non_strict F (y :: tl)

ih: cost_increasing F (dedup F (y :: tl))


cost_increasing F (x :: dedup F (y :: tl))
α✝: Type

F: Factory α✝

x, y: Meas

tl: List Meas

h_if: Factory.lt F x.cost y.cost

h: cost_increasing_non_strict F (y :: tl)

ih: cost_increasing F (dedup F (y :: tl))


cost_increasing F (x :: dedup F (y :: tl))
α✝: Type

F: Factory α✝

x, y: Meas

tl: List Meas

h_if: Factory.lt F x.cost y.cost

h: cost_increasing_non_strict F (y :: tl)

ih: cost_increasing F (dedup F (y :: tl))


cost_increasing F (x :: dedup F (y :: tl))
α✝: Type

F: Factory α✝

x, y: Meas

tl: List Meas

h_if: Factory.lt F x.cost y.cost

h: cost_increasing_non_strict F (y :: tl)

ih: cost_increasing F (dedup F (y :: tl))


cost_increasing F (x :: dedup F (y :: tl))
α✝: Type

F: Factory α✝

x, y: Meas

tl: List Meas

ih: cost_increasing_non_strict F (y :: tl) β†’ cost_increasing F (dedup F (y :: tl))

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

h_if: Β¬Factory.le F y.cost x.cost = true


cost_increasing F (x :: dedup F (y :: tl))
α✝: Type

F: Factory α✝

x, y: Meas

tl: List Meas

h_if: Factory.lt F x.cost y.cost

h: cost_increasing_non_strict F (y :: tl)

ih: cost_increasing F (dedup F (y :: tl))

h_case: dedup F (y :: tl) = []


nil
α✝: Type

F: Factory α✝

x, y: Meas

tl: List Meas

h_if: Factory.lt F x.cost y.cost

h: cost_increasing_non_strict F (y :: tl)

ih: cost_increasing F (dedup F (y :: tl))

head✝: Meas

tail✝: List Meas

h_case: dedup F (y :: tl) = head✝ :: tail✝


cons
cost_increasing F (x :: head✝ :: tail✝)
α✝: Type

F: Factory α✝

x, y: Meas

tl: List Meas

ih: cost_increasing_non_strict F (y :: tl) β†’ cost_increasing F (dedup F (y :: tl))

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

h_if: Β¬Factory.le F y.cost x.cost = true


cost_increasing F (x :: dedup F (y :: tl))
α✝: Type

F: Factory α✝

x, y: Meas

tl: List Meas

h_if: Factory.lt F x.cost y.cost

h: cost_increasing_non_strict F (y :: tl)

ih: cost_increasing F (dedup F (y :: tl))

h_case: dedup F (y :: tl) = []



Goals accomplished! πŸ™
α✝: Type

F: Factory α✝

x, y: Meas

tl: List Meas

ih: cost_increasing_non_strict F (y :: tl) β†’ cost_increasing F (dedup F (y :: tl))

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

h_if: Β¬Factory.le F y.cost x.cost = true


cost_increasing F (x :: dedup F (y :: tl))
α✝: Type

F: Factory α✝

x, y: Meas

tl: List Meas

h_if: Factory.lt F x.cost y.cost

h: cost_increasing_non_strict F (y :: tl)

ih: cost_increasing F (dedup F (y :: tl))

head✝: Meas

tail✝: List Meas

h_case: dedup F (y :: tl) = head✝ :: tail✝


cost_increasing F (x :: head✝ :: tail✝)
α✝: Type

F: Factory α✝

x, y: Meas

tl: List Meas

h_if: Factory.lt F x.cost y.cost

ih: cost_increasing F (dedup F (y :: tl))

head✝: Meas

tail✝: List Meas

h_case: dedup F (y :: tl) = head✝ :: tail✝

h: y.cost = head✝.cost


cost_increasing F (x :: head✝ :: tail✝)
α✝: Type

F: Factory α✝

x, y: Meas

tl: List Meas

h_if: Factory.lt F x.cost y.cost

h: cost_increasing_non_strict F (y :: tl)

ih: cost_increasing F (dedup F (y :: tl))

head✝: Meas

tail✝: List Meas

h_case: dedup F (y :: tl) = head✝ :: tail✝


cost_increasing F (x :: head✝ :: tail✝)
α✝: Type

F: Factory α✝

x, y: Meas

tl: List Meas

h_if: Factory.lt F x.cost y.cost

ih: cost_increasing F (dedup F (y :: tl))

head✝: Meas

tail✝: List Meas

h_case: dedup F (y :: tl) = head✝ :: tail✝

h: y.cost = head✝.cost


h_cost
Factory.lt F x.cost head✝.cost
α✝: Type

F: Factory α✝

x, y: Meas

tl: List Meas

h_if: Factory.lt F x.cost y.cost

ih: cost_increasing F (dedup F (y :: tl))

head✝: Meas

tail✝: List Meas

h_case: dedup F (y :: tl) = head✝ :: tail✝

h: y.cost = head✝.cost


h
cost_increasing F (head✝ :: tail✝)
α✝: Type

F: Factory α✝

x, y: Meas

tl: List Meas

h_if: Factory.lt F x.cost y.cost

h: cost_increasing_non_strict F (y :: tl)

ih: cost_increasing F (dedup F (y :: tl))

head✝: Meas

tail✝: List Meas

h_case: dedup F (y :: tl) = head✝ :: tail✝


cost_increasing F (x :: head✝ :: tail✝)
α✝: Type

F: Factory α✝

x, y: Meas

tl: List Meas

h_if: Factory.lt F x.cost y.cost

ih: cost_increasing F (dedup F (y :: tl))

head✝: Meas

tail✝: List Meas

h_case: dedup F (y :: tl) = head✝ :: tail✝

h: y.cost = head✝.cost


cost_increasing F (head✝ :: tail✝)
α✝: Type

F: Factory α✝

x, y: Meas

tl: List Meas

h_if: Factory.lt F x.cost y.cost

head✝: Meas

tail✝: List Meas

h_case: dedup F (y :: tl) = head✝ :: tail✝

h: y.cost = head✝.cost

ih: cost_increasing F (head✝ :: tail✝)


cost_increasing F (head✝ :: tail✝)
α✝: Type

F: Factory α✝

x, y: Meas

tl: List Meas

h_if: Factory.lt F x.cost y.cost

ih: cost_increasing F (dedup F (y :: tl))

head✝: Meas

tail✝: List Meas

h_case: dedup F (y :: tl) = head✝ :: tail✝

h: y.cost = head✝.cost


cost_increasing F (head✝ :: tail✝)

Goals accomplished! πŸ™
α✝: Type

F: Factory α✝

x, y: Meas

tl: List Meas

h_if: Factory.lt F x.cost y.cost

h: cost_increasing_non_strict F (y :: tl)

ih: cost_increasing F (dedup F (y :: tl))

head✝: Meas

tail✝: List Meas

h_case: dedup F (y :: tl) = head✝ :: tail✝


cost_increasing F (x :: head✝ :: tail✝)
α✝: Type

F: Factory α✝

x, y: Meas

tl: List Meas

h_if: Factory.lt F x.cost y.cost

ih: cost_increasing F (dedup F (y :: tl))

head✝: Meas

tail✝: List Meas

h_case: dedup F (y :: tl) = head✝ :: tail✝

h: y.cost = head✝.cost


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

F: Factory α✝

x, y: Meas

tl: List Meas

h_if: Factory.lt F x.cost y.cost

ih: cost_increasing F (dedup F (y :: tl))

head✝: Meas

tail✝: List Meas

h_case: dedup F (y :: tl) = head✝ :: tail✝

h: y.cost = head✝.cost


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

F: Factory α✝

x, y: Meas

tl: List Meas

h_if: Factory.lt F x.cost y.cost

ih: cost_increasing F (dedup F (y :: tl))

head✝: Meas

tail✝: List Meas

h_case: dedup F (y :: tl) = head✝ :: tail✝

h: y.cost = head✝.cost


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

F: Factory α✝

x, y: Meas

tl: List Meas

h_if: Factory.lt F x.cost y.cost

ih: cost_increasing F (dedup F (y :: tl))

head✝: Meas

tail✝: List Meas

h_case: dedup F (y :: tl) = head✝ :: tail✝

h: y.cost = head✝.cost


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

F: Factory α✝

x, y: Meas

tl: List Meas

h_if: Factory.lt F x.cost y.cost

ih: cost_increasing F (dedup F (y :: tl))

head✝: Meas

tail✝: List Meas

h_case: dedup F (y :: tl) = head✝ :: tail✝

h: y.cost = head✝.cost


Factory.lt F x.cost head✝.cost

Goals accomplished! πŸ™
lemma
dedup_cons: βˆ€ {Ξ± : Type} {m : Meas} {F : Factory Ξ±} {ms : List Meas} (m' : Meas), m ∈ dedup F ms β†’ m ∈ dedup F (m' :: ms)
dedup_cons
(
m': Meas
m'
:
Meas: {Ξ± : Type} β†’ Type
Meas
) (
h: m ∈ dedup F ms
h
:
m: ?m.17535
m
∈
dedup: {Ξ± : Type} β†’ Factory Ξ± β†’ List Meas β†’ List Meas
dedup
F: ?m.17558
F
ms: ?m.17583
ms
) :
m: ?m.17535
m
∈
dedup: {Ξ± : Type} β†’ Factory Ξ± β†’ List Meas β†’ List Meas
dedup
F: ?m.17558
F
(
m': Meas
m'
::
ms: ?m.17583
ms
) :=

Goals accomplished! πŸ™
α✝: Type

m: Meas

F: Factory α✝

ms: List Meas

m': Meas

h: m ∈ dedup F ms


m ∈ dedup F (m' :: ms)
α✝: Type

m: Meas

F: Factory α✝

m': Meas

h: m ∈ dedup F []


nil
m ∈ dedup F [m']
α✝: Type

m: Meas

F: Factory α✝

m', head✝: Meas

tail✝: List Meas

h: m ∈ dedup F (head✝ :: tail✝)


cons
m ∈ dedup F (m' :: head✝ :: tail✝)
α✝: Type

m: Meas

F: Factory α✝

ms: List Meas

m': Meas

h: m ∈ dedup F ms


m ∈ dedup F (m' :: ms)
α✝: Type

m: Meas

F: Factory α✝

m': Meas

h: m ∈ dedup F []


m ∈ dedup F [m']

Goals accomplished! πŸ™
α✝: Type

m: Meas

F: Factory α✝

ms: List Meas

m': Meas

h: m ∈ dedup F ms


m ∈ dedup F (m' :: ms)
α✝: Type

m: Meas

F: Factory α✝

m', x: Meas

tl: List Meas

h: m ∈ dedup F (x :: tl)


m ∈ dedup F (m' :: x :: tl)
α✝: Type

m: Meas

F: Factory α✝

m', x: Meas

tl: List Meas

h: m ∈ dedup F (x :: tl)


m ∈ if Factory.le F x.cost m'.cost = true then dedup F (x :: tl) else m' :: dedup F (x :: tl)
α✝: Type

m: Meas

F: Factory α✝

m', x: Meas

tl: List Meas

h: m ∈ dedup F (x :: tl)


m ∈ dedup F (m' :: x :: tl)
α✝: Type

m: Meas

F: Factory α✝

m', x: Meas

tl: List Meas

h: m ∈ dedup F (x :: tl)

h✝: Factory.le F x.cost m'.cost = true


inl
m ∈ dedup F (x :: tl)
α✝: Type

m: Meas

F: Factory α✝

m', x: Meas

tl: List Meas

h: m ∈ dedup F (x :: tl)

h✝: ¬Factory.le F x.cost m'.cost = true


inr
m ∈ m' :: dedup F (x :: tl)
α✝: Type

m: Meas

F: Factory α✝

m', x: Meas

tl: List Meas

h: m ∈ dedup F (x :: tl)


m ∈ dedup F (m' :: x :: tl)
α✝: Type

m: Meas

F: Factory α✝

m', x: Meas

tl: List Meas

h: m ∈ dedup F (x :: tl)

h✝: Factory.le F x.cost m'.cost = true


m ∈ dedup F (x :: tl)

Goals accomplished! πŸ™
α✝: Type

m: Meas

F: Factory α✝

m', x: Meas

tl: List Meas

h: m ∈ dedup F (x :: tl)


m ∈ dedup F (m' :: x :: tl)
α✝: Type

m: Meas

F: Factory α✝

m', x: Meas

tl: List Meas

h: m ∈ dedup F (x :: tl)

h✝: ¬Factory.le F x.cost m'.cost = true


m ∈ m' :: dedup F (x :: tl)
α✝: Type

m: Meas

F: Factory α✝

m', x: Meas

tl: List Meas

h: m ∈ dedup F (x :: tl)

h✝: ¬Factory.le F x.cost m'.cost = true


a
List.Mem m (dedup F (x :: tl))
α✝: Type

m: Meas

F: Factory α✝

m', x: Meas

tl: List Meas

h: m ∈ dedup F (x :: tl)

h✝: ¬Factory.le F x.cost m'.cost = true


m ∈ m' :: dedup F (x :: tl)

Goals accomplished! πŸ™
lemma
dedup_dom: βˆ€ {Ξ± : Type} {m : Meas} {ms : List Meas} {F : Factory Ξ±}, m ∈ ms β†’ last_decreasing ms β†’ cost_increasing_non_strict F ms β†’ βˆƒ m_better, m_better ∈ dedup F ms ∧ dominates F m_better m = true
dedup_dom
(
h: m ∈ ms
h
:
m: ?m.18926
m
∈
ms: ?m.18945
ms
) (
h_last: last_decreasing ms
h_last
:
last_decreasing: {Ξ± : Type} β†’ List Meas β†’ Prop
last_decreasing
ms: ?m.18945
ms
) (h_cost :
cost_increasing_non_strict: {Ξ± : Type} β†’ Factory Ξ± β†’ List Meas β†’ Prop
cost_increasing_non_strict
F: ?m.18988
F
ms: ?m.18945
ms
) : βˆƒ
m_better: ?m.19037
m_better
,
m_better: ?m.19037
m_better
∈
dedup: {Ξ± : Type} β†’ Factory Ξ± β†’ List Meas β†’ List Meas
dedup
F: ?m.18988
F
ms: ?m.18945
ms
∧
dominates: {Ξ± : Type} β†’ Factory Ξ± β†’ Meas β†’ Meas β†’ Bool
dominates
F: ?m.18988
F
m_better: ?m.19037
m_better
m: ?m.18926
m
:=

Goals accomplished! πŸ™
α✝: Type

m: Meas

ms: List Meas

F: Factory α✝

h: m ∈ ms

h_last: last_decreasing ms

h_cost: cost_increasing_non_strict F ms


βˆƒ m_better, m_better ∈ dedup F ms ∧ dominates F m_better m = true
α✝: Type

m: Meas

ms: List Meas

F: Factory α✝

h: m ∈ ms

h_last: last_decreasing ms

h_cost: cost_increasing_non_strict F ms


βˆƒ m_better, m_better ∈ dedup F ms ∧ dominates F m_better m = true
α✝: Type

m: Meas

ms: List Meas

F: Factory α✝

h: m ∈ ms

h_last: last_decreasing ms

h_cost: cost_increasing_non_strict F ms


βˆƒ m_better, m_better ∈ dedup F ms ∧ dominates F m_better m = true
α✝: Type

m: Meas

F: Factory α✝

h: m ∈ []

h_last: last_decreasing []

h_cost: cost_increasing_non_strict F []


nil
βˆƒ m_better, m_better ∈ dedup F [] ∧ dominates F m_better m = true
α✝: Type

m: Meas

F: Factory α✝

head✝: Meas

tail✝: List Meas

tail_ih✝: m ∈ tail✝ β†’ last_decreasing tail✝ β†’ cost_increasing_non_strict F tail✝ β†’ βˆƒ m_better, m_better ∈ dedup F tail✝ ∧ dominates F m_better m = true

h: m ∈ head✝ :: tail✝

h_last: last_decreasing (head✝ :: tail✝)

h_cost: cost_increasing_non_strict F (head✝ :: tail✝)


cons
βˆƒ m_better, m_better ∈ dedup F (head✝ :: tail✝) ∧ dominates F m_better m = true
α✝: Type

m: Meas

ms: List Meas

F: Factory α✝

h: m ∈ ms

h_last: last_decreasing ms

h_cost: cost_increasing_non_strict F ms


βˆƒ m_better, m_better ∈ dedup F ms ∧ dominates F m_better m = true
α✝: Type

m: Meas

F: Factory α✝

h: m ∈ []

h_last: last_decreasing []

h_cost: cost_increasing_non_strict F []


βˆƒ m_better, m_better ∈ dedup F [] ∧ dominates F m_better m = true

Goals accomplished! πŸ™
α✝: Type

m: Meas

ms: List Meas

F: Factory α✝

h: m ∈ ms

h_last: last_decreasing ms

h_cost: cost_increasing_non_strict F ms


βˆƒ m_better, m_better ∈ dedup F ms ∧ dominates F m_better m = true
α✝: Type

m: Meas

F: Factory α✝

x: Meas

ms: List Meas

ih: m ∈ ms β†’ last_decreasing ms β†’ cost_increasing_non_strict F ms β†’ βˆƒ m_better, m_better ∈ dedup F ms ∧ dominates F m_better m = true

h: m ∈ x :: ms

h_last: last_decreasing (x :: ms)

h_cost: cost_increasing_non_strict F (x :: ms)


βˆƒ m_better, m_better ∈ dedup F (x :: ms) ∧ dominates F m_better m = true
α✝: Type

m: Meas

F: Factory α✝

ms: List Meas

ih: m ∈ ms β†’ last_decreasing ms β†’ cost_increasing_non_strict F ms β†’ βˆƒ m_better, m_better ∈ dedup F ms ∧ dominates F m_better m = true

h_last: last_decreasing (m :: ms)

h_cost: cost_increasing_non_strict F (m :: ms)


head
βˆƒ m_better, m_better ∈ dedup F (m :: ms) ∧ dominates F m_better m = true
α✝: Type

m: Meas

F: Factory α✝

x: Meas

ms: List Meas

ih: m ∈ ms β†’ last_decreasing ms β†’ cost_increasing_non_strict F ms β†’ βˆƒ m_better, m_better ∈ dedup F ms ∧ dominates F m_better m = true

h_last: last_decreasing (x :: ms)

h_cost: cost_increasing_non_strict F (x :: ms)

a✝: List.Mem m ms


tail
βˆƒ m_better, m_better ∈ dedup F (x :: ms) ∧ dominates F m_better m = true
α✝: Type

m: Meas

F: Factory α✝

x: Meas

ms: List Meas

ih: m ∈ ms β†’ last_decreasing ms β†’ cost_increasing_non_strict F ms β†’ βˆƒ m_better, m_better ∈ dedup F ms ∧ dominates F m_better m = true

h: m ∈ x :: ms

h_last: last_decreasing (x :: ms)

h_cost: cost_increasing_non_strict F (x :: ms)


βˆƒ m_better, m_better ∈ dedup F (x :: ms) ∧ dominates F m_better m = true
α✝: Type

m: Meas

F: Factory α✝

ms: List Meas

ih: m ∈ ms β†’ last_decreasing ms β†’ cost_increasing_non_strict F ms β†’ βˆƒ m_better, m_better ∈ dedup F ms ∧ dominates F m_better m = true

h_last: last_decreasing (m :: ms)

h_cost: cost_increasing_non_strict F (m :: ms)


βˆƒ m_better, m_better ∈ dedup F (m :: ms) ∧ dominates F m_better m = true
α✝: Type

m: Meas

F: Factory α✝

ih: m ∈ [] β†’ last_decreasing [] β†’ cost_increasing_non_strict F [] β†’ βˆƒ m_better, m_better ∈ dedup F [] ∧ dominates F m_better m = true

h_last: last_decreasing [m]

h_cost: cost_increasing_non_strict F [m]


nil
βˆƒ m_better, m_better ∈ dedup F [m] ∧ dominates F m_better m = true
α✝: Type

m: Meas

F: Factory α✝

head✝: Meas

tail✝: List Meas

ih: m ∈ head✝ :: tail✝ β†’ last_decreasing (head✝ :: tail✝) β†’ cost_increasing_non_strict F (head✝ :: tail✝) β†’ βˆƒ m_better, m_better ∈ dedup F (head✝ :: tail✝) ∧ dominates F m_better m = true

h_last: last_decreasing (m :: head✝ :: tail✝)

h_cost: cost_increasing_non_strict F (m :: head✝ :: tail✝)


cons
βˆƒ m_better, m_better ∈ dedup F (m :: head✝ :: tail✝) ∧ dominates F m_better m = true
α✝: Type

m: Meas

F: Factory α✝

ms: List Meas

ih: m ∈ ms β†’ last_decreasing ms β†’ cost_increasing_non_strict F ms β†’ βˆƒ m_better, m_better ∈ dedup F ms ∧ dominates F m_better m = true

h_last: last_decreasing (m :: ms)

h_cost: cost_increasing_non_strict F (m :: ms)


βˆƒ m_better, m_better ∈ dedup F (m :: ms) ∧ dominates F m_better m = true
α✝: Type

m: Meas

F: Factory α✝

ih: m ∈ [] β†’ last_decreasing [] β†’ cost_increasing_non_strict F [] β†’ βˆƒ m_better, m_better ∈ dedup F [] ∧ dominates F m_better m = true

h_last: last_decreasing [m]

h_cost: cost_increasing_non_strict F [m]


βˆƒ m_better, m_better ∈ dedup F [m] ∧ dominates F m_better m = true

Goals accomplished! πŸ™
α✝: Type

m: Meas

F: Factory α✝

ms: List Meas

ih: m ∈ ms β†’ last_decreasing ms β†’ cost_increasing_non_strict F ms β†’ βˆƒ m_better, m_better ∈ dedup F ms ∧ dominates F m_better m = true

h_last: last_decreasing (m :: ms)

h_cost: cost_increasing_non_strict F (m :: ms)


βˆƒ m_better, m_better ∈ dedup F (m :: ms) ∧ dominates F m_better m = true
α✝: Type

m: Meas

F: Factory α✝

y: Meas

ms: List Meas

ih: m ∈ y :: ms β†’ last_decreasing (y :: ms) β†’ cost_increasing_non_strict F (y :: ms) β†’ βˆƒ m_better, m_better ∈ dedup F (y :: ms) ∧ dominates F m_better m = true

h_last: last_decreasing (m :: y :: ms)

h_cost: cost_increasing_non_strict F (m :: y :: ms)


βˆƒ m_better, m_better ∈ dedup F (m :: y :: ms) ∧ dominates F m_better m = true
α✝: Type

m: Meas

F: Factory α✝

y: Meas

ms: List Meas

ih: m ∈ y :: ms β†’ last_decreasing (y :: ms) β†’ cost_increasing_non_strict F (y :: ms) β†’ βˆƒ m_better, m_better ∈ dedup F (y :: ms) ∧ dominates F m_better m = true

h_last: last_decreasing (m :: y :: ms)

h_cost: cost_increasing_non_strict F (m :: y :: ms)


βˆƒ m_better, (m_better ∈ if Factory.le F y.cost m.cost = true then dedup F (y :: ms) else m :: dedup F (y :: ms)) ∧ dominates F m_better m = true
α✝: Type

m: Meas

F: Factory α✝

y: Meas

ms: List Meas

ih: m ∈ y :: ms β†’ last_decreasing (y :: ms) β†’ cost_increasing_non_strict F (y :: ms) β†’ βˆƒ m_better, m_better ∈ dedup F (y :: ms) ∧ dominates F m_better m = true

h_last: last_decreasing (m :: y :: ms)

h_cost: cost_increasing_non_strict F (m :: y :: ms)


βˆƒ m_better, m_better ∈ dedup F (m :: y :: ms) ∧ dominates F m_better m = true
α✝: Type

m: Meas

F: Factory α✝

y: Meas

ms: List Meas

ih: m ∈ y :: ms β†’ last_decreasing (y :: ms) β†’ cost_increasing_non_strict F (y :: ms) β†’ βˆƒ m_better, m_better ∈ dedup F (y :: ms) ∧ dominates F m_better m = true

h_last: last_decreasing (m :: y :: ms)

h_cost: cost_increasing_non_strict F (m :: y :: ms)

h✝: Factory.le F y.cost m.cost = true


inl
βˆƒ m_better, m_better ∈ dedup F (y :: ms) ∧ dominates F m_better m = true
α✝: Type

m: Meas

F: Factory α✝

y: Meas

ms: List Meas

ih: m ∈ y :: ms β†’ last_decreasing (y :: ms) β†’ cost_increasing_non_strict F (y :: ms) β†’ βˆƒ m_better, m_better ∈ dedup F (y :: ms) ∧ dominates F m_better m = true

h_last: last_decreasing (m :: y :: ms)

h_cost: cost_increasing_non_strict F (m :: y :: ms)

h✝: ¬Factory.le F y.cost m.cost = true


inr
βˆƒ m_better, m_better ∈ m :: dedup F (y :: ms) ∧ dominates F m_better m = true
α✝: Type

m: Meas

F: Factory α✝

y: Meas

ms: List Meas

ih: m ∈ y :: ms β†’ last_decreasing (y :: ms) β†’ cost_increasing_non_strict F (y :: ms) β†’ βˆƒ m_better, m_better ∈ dedup F (y :: ms) ∧ dominates F m_better m = true

h_last: last_decreasing (m :: y :: ms)

h_cost: cost_increasing_non_strict F (m :: y :: ms)


βˆƒ m_better, m_better ∈ dedup F (m :: y :: ms) ∧ dominates F m_better m = true
α✝: Type

m: Meas

F: Factory α✝

y: Meas

ms: List Meas

ih: m ∈ y :: ms β†’ last_decreasing (y :: ms) β†’ cost_increasing_non_strict F (y :: ms) β†’ βˆƒ m_better, m_better ∈ dedup F (y :: ms) ∧ dominates F m_better m = true

h_last: last_decreasing (m :: y :: ms)

h_cost: cost_increasing_non_strict F (m :: y :: ms)

h✝: Factory.le F y.cost m.cost = true


βˆƒ m_better, m_better ∈ dedup F (y :: ms) ∧ dominates F m_better m = true
α✝: Type

m: Meas

F: Factory α✝

y: Meas

ms: List Meas

ih: m ∈ y :: ms β†’ last_decreasing (y :: ms) β†’ cost_increasing_non_strict F (y :: ms) β†’ βˆƒ m_better, m_better ∈ dedup F (y :: ms) ∧ dominates F m_better m = true

h_last: last_decreasing (m :: y :: ms)

h_cost: cost_increasing_non_strict F (m :: y :: ms)

h✝: Factory.le F y.cost m.cost = true

h_case: dedup F (y :: ms) = []


nil
βˆƒ m_better, m_better ∈ [] ∧ dominates F m_better m = true
α✝: Type

m: Meas

F: Factory α✝

y: Meas

ms: List Meas

ih: m ∈ y :: ms β†’ last_decreasing (y :: ms) β†’ cost_increasing_non_strict F (y :: ms) β†’ βˆƒ m_better, m_better ∈ dedup F (y :: ms) ∧ dominates F m_better m = true

h_last: last_decreasing (m :: y :: ms)

h_cost: cost_increasing_non_strict F (m :: y :: ms)

h✝: Factory.le F y.cost m.cost = true

head✝: Meas

tail✝: List Meas

h_case: dedup F (y :: ms) = head✝ :: tail✝


cons
βˆƒ m_better, m_better ∈ head✝ :: tail✝ ∧ dominates F m_better m = true
α✝: Type

m: Meas

F: Factory α✝

y: Meas

ms: List Meas

ih: m ∈ y :: ms β†’ last_decreasing (y :: ms) β†’ cost_increasing_non_strict F (y :: ms) β†’ βˆƒ m_better, m_better ∈ dedup F (y :: ms) ∧ dominates F m_better m = true

h_last: last_decreasing (m :: y :: ms)

h_cost: cost_increasing_non_strict F (m :: y :: ms)

h✝: Factory.le F y.cost m.cost = true


βˆƒ m_better, m_better ∈ dedup F (y :: ms) ∧ dominates F m_better m = true
α✝: Type

m: Meas

F: Factory α✝

y: Meas

ms: List Meas

ih: m ∈ y :: ms β†’ last_decreasing (y :: ms) β†’ cost_increasing_non_strict F (y :: ms) β†’ βˆƒ m_better, m_better ∈ dedup F (y :: ms) ∧ dominates F m_better m = true

h_last: last_decreasing (m :: y :: ms)

h_cost: cost_increasing_non_strict F (m :: y :: ms)

h✝: Factory.le F y.cost m.cost = true

h_case: dedup F (y :: ms) = []


βˆƒ m_better, m_better ∈ [] ∧ dominates F m_better m = true
α✝: Type

m: Meas

F: Factory α✝

y: Meas

ms: List Meas

ih: m ∈ y :: ms β†’ last_decreasing (y :: ms) β†’ cost_increasing_non_strict F (y :: ms) β†’ βˆƒ m_better, m_better ∈ dedup F (y :: ms) ∧ dominates F m_better m = true

h_last: last_decreasing (m :: y :: ms)

h_cost: cost_increasing_non_strict F (m :: y :: ms)

h✝: Factory.le F y.cost m.cost = true

h_case: dedup F (y :: ms) = []


βˆƒ m_better, m_better ∈ [] ∧ dominates F m_better m = true

Goals accomplished! πŸ™
α✝: Type

m: Meas

F: Factory α✝

y: Meas

ms: List Meas

ih: m ∈ y :: ms β†’ last_decreasing (y :: ms) β†’ cost_increasing_non_strict F (y :: ms) β†’ βˆƒ m_better, m_better ∈ dedup F (y :: ms) ∧ dominates F m_better m = true

h_last: last_decreasing (m :: y :: ms)

h_cost: cost_increasing_non_strict F (m :: y :: ms)

h✝: Factory.le F y.cost m.cost = true

h_case: dedup F (y :: ms) = []


dedup F (y :: ms) β‰  []
α✝: Type

m: Meas

F: Factory α✝

y: Meas

ms: List Meas

ih: m ∈ y :: ms β†’ last_decreasing (y :: ms) β†’ cost_increasing_non_strict F (y :: ms) β†’ βˆƒ m_better, m_better ∈ dedup F (y :: ms) ∧ dominates F m_better m = true

h_last: last_decreasing (m :: y :: ms)

h_cost: cost_increasing_non_strict F (m :: y :: ms)

h✝: Factory.le F y.cost m.cost = true

h_case: dedup F (y :: ms) = []


dedup F (y :: ms) β‰  []
α✝: Type

m: Meas

F: Factory α✝

y: Meas

ms: List Meas

ih: m ∈ y :: ms β†’ last_decreasing (y :: ms) β†’ cost_increasing_non_strict F (y :: ms) β†’ βˆƒ m_better, m_better ∈ dedup F (y :: ms) ∧ dominates F m_better m = true

h_last: last_decreasing (m :: y :: ms)

h_cost: cost_increasing_non_strict F (m :: y :: ms)

h✝: Factory.le F y.cost m.cost = true

h_case: dedup F (y :: ms) = []


dedup F (y :: ms) β‰  []
α✝: Type

m: Meas

F: Factory α✝

y: Meas

ms: List Meas

ih: m ∈ y :: ms β†’ last_decreasing (y :: ms) β†’ cost_increasing_non_strict F (y :: ms) β†’ βˆƒ m_better, m_better ∈ dedup F (y :: ms) ∧ dominates F m_better m = true

h_last: last_decreasing (m :: y :: ms)

h_cost: cost_increasing_non_strict F (m :: y :: ms)

h✝: Factory.le F y.cost m.cost = true

h_case: dedup F (y :: ms) = []


h
y :: ms β‰  []
α✝: Type

m: Meas

F: Factory α✝

y: Meas

ms: List Meas

ih: m ∈ y :: ms β†’ last_decreasing (y :: ms) β†’ cost_increasing_non_strict F (y :: ms) β†’ βˆƒ m_better, m_better ∈ dedup F (y :: ms) ∧ dominates F m_better m = true

h_last: last_decreasing (m :: y :: ms)

h_cost: cost_increasing_non_strict F (m :: y :: ms)

h✝: Factory.le F y.cost m.cost = true

h_case: dedup F (y :: ms) = []


dedup F (y :: ms) β‰  []

Goals accomplished! πŸ™

Goals accomplished! πŸ™
α✝: Type

m: Meas

F: Factory α✝

y: Meas

ms: List Meas

ih: m ∈ y :: ms β†’ last_decreasing (y :: ms) β†’ cost_increasing_non_strict F (y :: ms) β†’ βˆƒ m_better, m_better ∈ dedup F (y :: ms) ∧ dominates F m_better m = true

h_last: last_decreasing (m :: y :: ms)

h_cost: cost_increasing_non_strict F (m :: y :: ms)

h✝: Factory.le F y.cost m.cost = true

h_case: dedup F (y :: ms) = []


βˆƒ m_better, m_better ∈ [] ∧ dominates F m_better m = true

Goals accomplished! πŸ™
α✝: Type

m: Meas

F: Factory α✝

y: Meas

ms: List Meas

ih: m ∈ y :: ms β†’ last_decreasing (y :: ms) β†’ cost_increasing_non_strict F (y :: ms) β†’ βˆƒ m_better, m_better ∈ dedup F (y :: ms) ∧ dominates F m_better m = true

h_last: last_decreasing (m :: y :: ms)

h_cost: cost_increasing_non_strict F (m :: y :: ms)

h✝: Factory.le F y.cost m.cost = true


βˆƒ m_better, m_better ∈ dedup F (y :: ms) ∧ dominates F m_better m = true
α✝: Type

m: Meas

F: Factory α✝

y: Meas

ms: List Meas

ih: m ∈ y :: ms β†’ last_decreasing (y :: ms) β†’ cost_increasing_non_strict F (y :: ms) β†’ βˆƒ m_better, m_better ∈ dedup F (y :: ms) ∧ dominates F m_better m = true

h_last: last_decreasing (m :: y :: ms)

h_cost: cost_increasing_non_strict F (m :: y :: ms)

h✝: Factory.le F y.cost m.cost = true

hd: Meas

tl: List Meas

h_case: dedup F (y :: ms) = hd :: tl


βˆƒ m_better, m_better ∈ hd :: tl ∧ dominates F m_better m = true
α✝: Type

m: Meas

F: Factory α✝

y: Meas

ms: List Meas

ih: m ∈ y :: ms β†’ last_decreasing (y :: ms) β†’ cost_increasing_non_strict F (y :: ms) β†’ βˆƒ m_better, m_better ∈ dedup F (y :: ms) ∧ dominates F m_better m = true

h_last: last_decreasing (m :: y :: ms)

h_cost: cost_increasing_non_strict F (m :: y :: ms)

h✝: Factory.le F y.cost m.cost = true

hd: Meas

tl: List Meas

h_case: dedup F (y :: ms) = hd :: tl


hd ∈ hd :: tl ∧ dominates F hd m = true
α✝: Type

m: Meas

F: Factory α✝

y: Meas

ms: List Meas

ih: m ∈ y :: ms β†’ last_decreasing (y :: ms) β†’ cost_increasing_non_strict F (y :: ms) β†’ βˆƒ m_better, m_better ∈ dedup F (y :: ms) ∧ dominates F m_better m = true

h_last: last_decreasing (m :: y :: ms)

h_cost: cost_increasing_non_strict F (m :: y :: ms)

h✝: Factory.le F y.cost m.cost = true

hd: Meas

tl: List Meas

h_case: dedup F (y :: ms) = hd :: tl


βˆƒ m_better, m_better ∈ hd :: tl ∧ dominates F m_better m = true
α✝: Type

m: Meas

F: Factory α✝

y: Meas

ms: List Meas

ih: m ∈ y :: ms β†’ last_decreasing (y :: ms) β†’ cost_increasing_non_strict F (y :: ms) β†’ βˆƒ m_better, m_better ∈ dedup F (y :: ms) ∧ dominates F m_better m = true

h_last: last_decreasing (m :: y :: ms)

h_cost: cost_increasing_non_strict F (m :: y :: ms)

h✝: Factory.le F y.cost m.cost = true

hd: Meas

tl: List Meas

h_case: dedup F (y :: ms) = hd :: tl


α✝: Type

m: Meas

F: Factory α✝

y: Meas

ms: List Meas

ih: m ∈ y :: ms β†’ last_decreasing (y :: ms) β†’ cost_increasing_non_strict F (y :: ms) β†’ βˆƒ m_better, m_better ∈ dedup F (y :: ms) ∧ dominates F m_better m = true

h_last: last_decreasing (m :: y :: ms)

h_cost: cost_increasing_non_strict F (m :: y :: ms)

h✝: Factory.le F y.cost m.cost = true

hd: Meas

tl: List Meas

h_case: dedup F (y :: ms) = hd :: tl


βˆƒ m_better, m_better ∈ hd :: tl ∧ dominates F m_better m = true
α✝: Type

m: Meas

F: Factory α✝

y: Meas

ms: List Meas

ih: m ∈ y :: ms β†’ last_decreasing (y :: ms) β†’ cost_increasing_non_strict F (y :: ms) β†’ βˆƒ m_better, m_better ∈ dedup F (y :: ms) ∧ dominates F m_better m = true

h_last: last_decreasing (m :: y :: ms)

h_cost: cost_increasing_non_strict F (m :: y :: ms)

h✝: Factory.le F y.cost m.cost = true

hd: Meas

tl: List Meas

h_case: dedup F (y :: ms) = hd :: tl

h_last': y.last β‰₯ hd.last


α✝: Type

m: Meas

F: Factory α✝

y: Meas

ms: List Meas

ih: m ∈ y :: ms β†’ last_decreasing (y :: ms) β†’ cost_increasing_non_strict F (y :: ms) β†’ βˆƒ m_better, m_better ∈ dedup F (y :: ms) ∧ dominates F m_better m = true

h_last: last_decreasing (m :: y :: ms)

h_cost: cost_increasing_non_strict F (m :: y :: ms)

h✝: Factory.le F y.cost m.cost = true

hd: Meas

tl: List Meas

h_case: dedup F (y :: ms) = hd :: tl


βˆƒ m_better, m_better ∈ hd :: tl ∧ dominates F m_better m = true
α✝: Type

m: Meas

F: Factory α✝

y: Meas

ms: List Meas

ih: m ∈ y :: ms β†’ last_decreasing (y :: ms) β†’ cost_increasing_non_strict F (y :: ms) β†’ βˆƒ m_better, m_better ∈ dedup F (y :: ms) ∧ dominates F m_better m = true

h_last: last_decreasing (m :: y :: ms)

h_cost: cost_increasing_non_strict F (m :: y :: ms)

h✝: Factory.le F y.cost m.cost = true

hd: Meas

tl: List Meas

h_case: dedup F (y :: ms) = hd :: tl

h_last': y.last β‰₯ hd.last

h_cost': y.cost = hd.cost


α✝: Type

m: Meas

F: Factory α✝

y: Meas

ms: List Meas

ih: m ∈ y :: ms β†’ last_decreasing (y :: ms) β†’ cost_increasing_non_strict F (y :: ms) β†’ βˆƒ m_better, m_better ∈ dedup F (y :: ms) ∧ dominates F m_better m = true

h_last: last_decreasing (m :: y :: ms)

h_cost: cost_increasing_non_strict F (m :: y :: ms)

h✝: Factory.le F y.cost m.cost = true

hd: Meas

tl: List Meas

h_case: dedup F (y :: ms) = hd :: tl


βˆƒ m_better, m_better ∈ hd :: tl ∧ dominates F m_better m = true
α✝: Type

m: Meas

F: Factory α✝

y: Meas

ms: List Meas

ih: m ∈ y :: ms β†’ last_decreasing (y :: ms) β†’ cost_increasing_non_strict F (y :: ms) β†’ βˆƒ m_better, m_better ∈ dedup F (y :: ms) ∧ dominates F m_better m = true

h_last: last_decreasing (m :: y :: ms)

h_cost: cost_increasing_non_strict F (m :: y :: ms)

h✝: Factory.le F y.cost m.cost = true

hd: Meas

tl: List Meas

h_case: dedup F (y :: ms) = hd :: tl

h_last': y.last β‰₯ hd.last

h_cost': y.cost = hd.cost


hd.last ≀ m.last ∧ Factory.le F hd.cost m.cost = true
α✝: Type

m: Meas

F: Factory α✝

y: Meas

ms: List Meas

ih: m ∈ y :: ms β†’ last_decreasing (y :: ms) β†’ cost_increasing_non_strict F (y :: ms) β†’ βˆƒ m_better, m_better ∈ dedup F (y :: ms) ∧ dominates F m_better m = true

h_last: last_decreasing (m :: y :: ms)

h_cost: cost_increasing_non_strict F (m :: y :: ms)

h✝: Factory.le F y.cost m.cost = true

hd: Meas

tl: List Meas

h_case: dedup F (y :: ms) = hd :: tl


βˆƒ m_better, m_better ∈ hd :: tl ∧ dominates F m_better m = true
α✝: Type

m: Meas

F: Factory α✝

y: Meas

ms: List Meas

ih: m ∈ y :: ms β†’ last_decreasing (y :: ms) β†’ cost_increasing_non_strict F (y :: ms) β†’ βˆƒ m_better, m_better ∈ dedup F (y :: ms) ∧ dominates F m_better m = true

h_last: last_decreasing (m :: y :: ms)

h_cost: cost_increasing_non_strict F (m :: y :: ms)

h✝: Factory.le F y.cost m.cost = true

hd: Meas

tl: List Meas

h_case: dedup F (y :: ms) = hd :: tl

h_last': y.last β‰₯ hd.last

h_cost': y.cost = hd.cost


left
hd.last ≀ m.last
α✝: Type

m: Meas

F: Factory α✝

y: Meas

ms: List Meas

ih: m ∈ y :: ms β†’ last_decreasing (y :: ms) β†’ cost_increasing_non_strict F (y :: ms) β†’ βˆƒ m_better, m_better ∈ dedup F (y :: ms) ∧ dominates F m_better m = true

h_last: last_decreasing (m :: y :: ms)

h_cost: cost_increasing_non_strict F (m :: y :: ms)

h✝: Factory.le F y.cost m.cost = true

hd: Meas

tl: List Meas

h_case: dedup F (y :: ms) = hd :: tl

h_last': y.last β‰₯ hd.last

h_cost': y.cost = hd.cost


right
Factory.le F hd.cost m.cost = true
α✝: Type

m: Meas

F: Factory α✝

y: Meas

ms: List Meas

ih: m ∈ y :: ms β†’ last_decreasing (y :: ms) β†’ cost_increasing_non_strict F (y :: ms) β†’ βˆƒ m_better, m_better ∈ dedup F (y :: ms) ∧ dominates F m_better m = true

h_last: last_decreasing (m :: y :: ms)

h_cost: cost_increasing_non_strict F (m :: y :: ms)

h✝: Factory.le F y.cost m.cost = true

hd: Meas

tl: List Meas

h_case: dedup F (y :: ms) = hd :: tl


βˆƒ m_better, m_better ∈ hd :: tl ∧ dominates F m_better m = true
α✝: Type

m: Meas

F: Factory α✝

y: Meas

ms: List Meas

ih: m ∈ y :: ms β†’ last_decreasing (y :: ms) β†’ cost_increasing_non_strict F (y :: ms) β†’ βˆƒ m_better, m_better ∈ dedup F (y :: ms) ∧ dominates F m_better m = true

h_last: last_decreasing (m :: y :: ms)

h_cost: cost_increasing_non_strict F (m :: y :: ms)

h✝: Factory.le F y.cost m.cost = true

hd: Meas

tl: List Meas

h_case: dedup F (y :: ms) = hd :: tl

h_last': y.last β‰₯ hd.last

h_cost': y.cost = hd.cost


hd.last ≀ m.last
α✝: Type

m: Meas

F: Factory α✝

y: Meas

ms: List Meas

ih: m ∈ y :: ms β†’ last_decreasing (y :: ms) β†’ cost_increasing_non_strict F (y :: ms) β†’ βˆƒ m_better, m_better ∈ dedup F (y :: ms) ∧ dominates F m_better m = true

h_last: last_decreasing (m :: y :: ms)

h_cost: cost_increasing_non_strict F (m :: y :: ms)

h✝: Factory.le F y.cost m.cost = true

hd: Meas

tl: List Meas

h_case: dedup F (y :: ms) = hd :: tl

h_last': y.last β‰₯ hd.last

h_cost': y.cost = hd.cost

h_last'': m.last > y.last


hd.last ≀ m.last
α✝: Type

m: Meas

F: Factory α✝

y: Meas

ms: List Meas

ih: m ∈ y :: ms β†’ last_decreasing (y :: ms) β†’ cost_increasing_non_strict F (y :: ms) β†’ βˆƒ m_better, m_better ∈ dedup F (y :: ms) ∧ dominates F m_better m = true

h_last: last_decreasing (m :: y :: ms)

h_cost: cost_increasing_non_strict F (m :: y :: ms)

h✝: Factory.le F y.cost m.cost = true

hd: Meas

tl: List Meas

h_case: dedup F (y :: ms) = hd :: tl

h_last': y.last β‰₯ hd.last

h_cost': y.cost = hd.cost


hd.last ≀ m.last
α✝: Type

m, y, hd: Meas

h_last': y.last β‰₯ hd.last

h_last'': m.last > y.last


hd.last ≀ m.last
α✝: Type

m: Meas

F: Factory α✝

y: Meas

ms: List Meas

ih: m ∈ y :: ms β†’ last_decreasing (y :: ms) β†’ cost_increasing_non_strict F (y :: ms) β†’ βˆƒ m_better, m_better ∈ dedup F (y :: ms) ∧ dominates F m_better m = true

h_last: last_decreasing (m :: y :: ms)

h_cost: cost_increasing_non_strict F (m :: y :: ms)

h✝: Factory.le F y.cost m.cost = true

hd: Meas

tl: List Meas

h_case: dedup F (y :: ms) = hd :: tl

h_last': y.last β‰₯ hd.last

h_cost': y.cost = hd.cost


hd.last ≀ m.last

Goals accomplished! πŸ™
α✝: Type

m: Meas

F: Factory α✝

y: Meas

ms: List Meas

ih: m ∈ y :: ms β†’ last_decreasing (y :: ms) β†’ cost_increasing_non_strict F (y :: ms) β†’ βˆƒ m_better, m_better ∈ dedup F (y :: ms) ∧ dominates F m_better m = true

h_last: last_decreasing (m :: y :: ms)

h_cost: cost_increasing_non_strict F (m :: y :: ms)

h✝: Factory.le F y.cost m.cost = true

hd: Meas

tl: List Meas

h_case: dedup F (y :: ms) = hd :: tl


βˆƒ m_better, m_better ∈ hd :: tl ∧ dominates F m_better m = true
α✝: Type

m: Meas

F: Factory α✝

y: Meas

ms: List Meas

ih: m ∈ y :: ms β†’ last_decreasing (y :: ms) β†’ cost_increasing_non_strict F (y :: ms) β†’ βˆƒ m_better, m_better ∈ dedup F (y :: ms) ∧ dominates F m_better m = true

h_last: last_decreasing (m :: y :: ms)

h_cost: cost_increasing_non_strict F (m :: y :: ms)

h✝: Factory.le F y.cost m.cost = true

hd: Meas

tl: List Meas

h_case: dedup F (y :: ms) = hd :: tl

h_last': y.last β‰₯ hd.last

h_cost': y.cost = hd.cost


Factory.le F hd.cost m.cost = true
α✝: Type

m: Meas

F: Factory α✝

y: Meas

ms: List Meas

ih: m ∈ y :: ms β†’ last_decreasing (y :: ms) β†’ cost_increasing_non_strict F (y :: ms) β†’ βˆƒ m_better, m_better ∈ dedup F (y :: ms) ∧ dominates F m_better m = true

h_last: last_decreasing (m :: y :: ms)

h_cost: cost_increasing_non_strict F (m :: y :: ms)

h✝: Factory.le F y.cost m.cost = true

hd: Meas

tl: List Meas

h_case: dedup F (y :: ms) = hd :: tl

h_last': y.last β‰₯ hd.last

h_cost': y.cost = hd.cost


Factory.le F hd.cost m.cost = true
α✝: Type

m: Meas

F: Factory α✝

y: Meas

ms: List Meas

ih: m ∈ y :: ms β†’ last_decreasing (y :: ms) β†’ cost_increasing_non_strict F (y :: ms) β†’ βˆƒ m_better, m_better ∈ dedup F (y :: ms) ∧ dominates F m_better m = true

h_last: last_decreasing (m :: y :: ms)

h_cost: cost_increasing_non_strict F (m :: y :: ms)

h✝: Factory.le F y.cost m.cost = true

hd: Meas

tl: List Meas

h_case: dedup F (y :: ms) = hd :: tl

h_last': y.last β‰₯ hd.last

h_cost': y.cost = hd.cost


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

m: Meas

F: Factory α✝

y: Meas

ms: List Meas

ih: m ∈ y :: ms β†’ last_decreasing (y :: ms) β†’ cost_increasing_non_strict F (y :: ms) β†’ βˆƒ m_better, m_better ∈ dedup F (y :: ms) ∧ dominates F m_better m = true

h_last: last_decreasing (m :: y :: ms)

h_cost: cost_increasing_non_strict F (m :: y :: ms)

h✝: Factory.le F y.cost m.cost = true

hd: Meas

tl: List Meas

h_case: dedup F (y :: ms) = hd :: tl

h_last': y.last β‰₯ hd.last

h_cost': y.cost = hd.cost


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

m: Meas

F: Factory α✝

y: Meas

ms: List Meas

ih: m ∈ y :: ms β†’ last_decreasing (y :: ms) β†’ cost_increasing_non_strict F (y :: ms) β†’ βˆƒ m_better, m_better ∈ dedup F (y :: ms) ∧ dominates F m_better m = true

h_last: last_decreasing (m :: y :: ms)

h_cost: cost_increasing_non_strict F (m :: y :: ms)

h✝: Factory.le F y.cost m.cost = true

hd: Meas

tl: List Meas

h_case: dedup F (y :: ms) = hd :: tl

h_last': y.last β‰₯ hd.last

h_cost': y.cost = hd.cost


Factory.le F hd.cost m.cost = true

Goals accomplished! πŸ™
α✝: Type

m: Meas

F: Factory α✝

y: Meas

ms: List Meas

ih: m ∈ y :: ms β†’ last_decreasing (y :: ms) β†’ cost_increasing_non_strict F (y :: ms) β†’ βˆƒ m_better, m_better ∈ dedup F (y :: ms) ∧ dominates F m_better m = true

h_last: last_decreasing (m :: y :: ms)

h_cost: cost_increasing_non_strict F (m :: y :: ms)


βˆƒ m_better, m_better ∈ dedup F (m :: y :: ms) ∧ dominates F m_better m = true
α✝: Type

m: Meas

F: Factory α✝

y: Meas

ms: List Meas

ih: m ∈ y :: ms β†’ last_decreasing (y :: ms) β†’ cost_increasing_non_strict F (y :: ms) β†’ βˆƒ m_better, m_better ∈ dedup F (y :: ms) ∧ dominates F m_better m = true

h_last: last_decreasing (m :: y :: ms)

h_cost: cost_increasing_non_strict F (m :: y :: ms)

h✝: ¬Factory.le F y.cost m.cost = true


βˆƒ m_better, m_better ∈ m :: dedup F (y :: ms) ∧ dominates F m_better m = true

Goals accomplished! πŸ™
α✝: Type

m: Meas

F: Factory α✝

x: Meas

ms: List Meas

ih: m ∈ ms β†’ last_decreasing ms β†’ cost_increasing_non_strict F ms β†’ βˆƒ m_better, m_better ∈ dedup F ms ∧ dominates F m_better m = true

h: m ∈ x :: ms

h_last: last_decreasing (x :: ms)

h_cost: cost_increasing_non_strict F (x :: ms)


βˆƒ m_better, m_better ∈ dedup F (x :: ms) ∧ dominates F m_better m = true
α✝: Type

m: Meas

F: Factory α✝

x: Meas

ms: List Meas

ih: m ∈ ms β†’ last_decreasing ms β†’ cost_increasing_non_strict F ms β†’ βˆƒ m_better, m_better ∈ dedup F ms ∧ dominates F m_better m = true

h_last: last_decreasing (x :: ms)

h_cost: cost_increasing_non_strict F (x :: ms)

h: List.Mem m ms


βˆƒ m_better, m_better ∈ dedup F (x :: ms) ∧ dominates F m_better m = true
α✝: Type

m: Meas

F: Factory α✝

x: Meas

ms: List Meas

ih: m ∈ ms β†’ last_decreasing ms β†’ cost_increasing_non_strict F ms β†’ βˆƒ m_better, m_better ∈ dedup F ms ∧ dominates F m_better m = true

h_last: last_decreasing (x :: ms)

h_cost: cost_increasing_non_strict F (x :: ms)

h✝: List.Mem m ms

m_better: Meas

h: m_better ∈ dedup F ms

h_dom: dominates F m_better m = true


βˆƒ m_better, m_better ∈ dedup F (x :: ms) ∧ dominates F m_better m = true
α✝: Type

m: Meas

F: Factory α✝

x: Meas

ms: List Meas

ih: m ∈ ms β†’ last_decreasing ms β†’ cost_increasing_non_strict F ms β†’ βˆƒ m_better, m_better ∈ dedup F ms ∧ dominates F m_better m = true

h_last: last_decreasing (x :: ms)

h_cost: cost_increasing_non_strict F (x :: ms)

h: List.Mem m ms


βˆƒ m_better, m_better ∈ dedup F (x :: ms) ∧ dominates F m_better m = true
α✝: Type

m: Meas

F: Factory α✝

x: Meas

ms: List Meas

ih: m ∈ ms β†’ last_decreasing ms β†’ cost_increasing_non_strict F ms β†’ βˆƒ m_better, m_better ∈ dedup F ms ∧ dominates F m_better m = true

h_last: last_decreasing (x :: ms)

h_cost: cost_increasing_non_strict F (x :: ms)

h✝: List.Mem m ms

m_better: Meas

h: m_better ∈ dedup F ms

h_dom: dominates F m_better m = true


m_better ∈ dedup F (x :: ms) ∧ dominates F m_better m = true
α✝: Type

m: Meas

F: Factory α✝

x: Meas

ms: List Meas

ih: m ∈ ms β†’ last_decreasing ms β†’ cost_increasing_non_strict F ms β†’ βˆƒ m_better, m_better ∈ dedup F ms ∧ dominates F m_better m = true

h_last: last_decreasing (x :: ms)

h_cost: cost_increasing_non_strict F (x :: ms)

h: List.Mem m ms


βˆƒ m_better, m_better ∈ dedup F (x :: ms) ∧ dominates F m_better m = true
α✝: Type

m: Meas

F: Factory α✝

x: Meas

ms: List Meas

ih: m ∈ ms β†’ last_decreasing ms β†’ cost_increasing_non_strict F ms β†’ βˆƒ m_better, m_better ∈ dedup F ms ∧ dominates F m_better m = true

h_last: last_decreasing (x :: ms)

h_cost: cost_increasing_non_strict F (x :: ms)

h✝: List.Mem m ms

m_better: Meas

h_dom: dominates F m_better m = true

h: m_better ∈ dedup F (x :: ms)


m_better ∈ dedup F (x :: ms) ∧ dominates F m_better m = true
α✝: Type

m: Meas

F: Factory α✝

x: Meas

ms: List Meas

ih: m ∈ ms β†’ last_decreasing ms β†’ cost_increasing_non_strict F ms β†’ βˆƒ m_better, m_better ∈ dedup F ms ∧ dominates F m_better m = true

h_last: last_decreasing (x :: ms)

h_cost: cost_increasing_non_strict F (x :: ms)

h: List.Mem m ms


βˆƒ m_better, m_better ∈ dedup F (x :: ms) ∧ dominates F m_better m = true

Goals accomplished! πŸ™

Goals accomplished! πŸ™