import Pretty.Supports.Pareto /-! ## Equivalence of Pareto frontier definitions -/ /-- The traditional definition of Pareto frontier based on non-domination -/ def pareto_nondom (F : FactoryF: Factory αα) (α: ?m.3ms : List (@Measms: List Measα)) :α: ?m.3Prop := ā (Prop: Typeii: āj :j: āā) (ā: Typeh_i :h_i: i < List.length msi <i: āms.length) (ms: List Meash_j :h_j: j < List.length msj <j: āms.length),ms: List Measi āi: āj ā (¬ dominatesj: āF (F: Factory αms.ms: List Measget āØget: {α : Type ?u.48} ā (as : List α) ā Fin (List.length as) ā αi,i: āGoals accomplished! ši < List.length msā©) (Goals accomplished! šms.ms: List Measget āØget: {α : Type ?u.60} ā (as : List α) ā Fin (List.length as) ā αj,j: āGoals accomplished! šj < List.length msā©) ⧠¬ dominatesGoals accomplished! šF (F: Factory αms.ms: List Measget āØget: {α : Type ?u.150} ā (as : List α) ā Fin (List.length as) ā αj,j: āGoals accomplished! šj < List.length msā©) (Goals accomplished! šms.ms: List Measget āØget: {α : Type ?u.160} ā (as : List α) ā Fin (List.length as) ā αi,i: āGoals accomplished! ši < List.length msā©)) /-- Our formalized definition of Pareto frontier is equivalent to the one in the paper based on non-domination. -/ theoremGoals accomplished! špareto_nondom_iff_pareto : paretopareto_nondom_iff_pareto: ā {α : Type} {F : Factory α} {ms : List Meas}, pareto F ms ā pareto_nondom F ms ā§ last_decreasing msFF: ?m.262ms ā (pareto_nondomms: ?m.269FF: ?m.262ms ā§ last_decreasingms: ?m.269ms) :=ms: ?m.269Goals accomplished! špareto F ms ā pareto_nondom F ms ā§ last_decreasing ms
mppareto F ms ā pareto_nondom F ms ā§ last_decreasing ms
mprpareto_nondom F ms ā§ last_decreasing ms ā pareto F mspareto F ms ā pareto_nondom F ms ā§ last_decreasing mspareto F ms ā pareto_nondom F ms ā§ last_decreasing mspareto_nondom F ms ā§ last_decreasing mspareto F ms ā pareto_nondom F ms ā§ last_decreasing ms
leftpareto_nondom F ms
rightpareto F ms ā pareto_nondom F ms ā§ last_decreasing mspareto_nondom F mspareto_nondom F mspareto_nondom F msαā: Type
F: Factory αā
ms: List Meas
h: last_decreasing ms ā§ cost_increasing F ms
i, j: ā
hi: i < List.length ms
hj: j < List.length ms
h_neq: ¬i = jpareto_nondom F msαā: Type
F: Factory αā
ms: List Meas
h: last_decreasing ms ā§ cost_increasing F ms
i, j: ā
hi: i < List.length ms
hj: j < List.length ms
h_neq: ¬i = j
h_last: ā (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 }).lastpareto_nondom F msαā: Type
F: Factory αā
ms: List Meas
h: last_decreasing ms ā§ cost_increasing F ms
i, j: ā
hi: i < List.length ms
hj: j < List.length ms
h_neq: ¬i = j
h_last: ā (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
h_cost: ā (i j : ā) (h_i : i < List.length ms) (h_j : j < List.length ms), i < j ā Factory.lt F (List.get ms { val := i, isLt := h_i }).cost (List.get ms { val := j, isLt := h_j }).costpareto_nondom F msαā: Type
F: Factory αā
ms: List Meas
h: last_decreasing ms ā§ cost_increasing F ms
i, j: ā
hi: i < List.length ms
hj: j < List.length ms
h_neq: ¬i = j
h_last: ā (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
h_cost: ā (i j : ā) (h_i : i < List.length ms) (h_j : j < List.length ms), i < j ā Factory.lt F (List.get ms { val := i, isLt := h_i }).cost (List.get ms { val := j, isLt := h_j }).cost((List.get ms { val := j, isLt := hj }).last < (List.get ms { val := i, isLt := hi }).last ⨠Factory.le F (List.get ms { val := i, isLt := hi }).cost (List.get ms { val := j, isLt := hj }).cost = false) ā§ ((List.get ms { val := i, isLt := hi }).last < (List.get ms { val := j, isLt := hj }).last ⨠Factory.le F (List.get ms { val := j, isLt := hj }).cost (List.get ms { val := i, isLt := hi }).cost = false)pareto_nondom F msαā: Type
F: Factory αā
ms: List Meas
h: last_decreasing ms ā§ cost_increasing F ms
i, j: ā
hi: i < List.length ms
hj: j < List.length ms
h_neq: ¬i = j
h_last: ā (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
h_cost: ā (i j : ā) (h_i : i < List.length ms) (h_j : j < List.length ms), i < j ā Factory.lt F (List.get ms { val := i, isLt := h_i }).cost (List.get ms { val := j, isLt := h_j }).cost
h_tri: i < j ⨠i = j ⨠j < i((List.get ms { val := j, isLt := hj }).last < (List.get ms { val := i, isLt := hi }).last ⨠Factory.le F (List.get ms { val := i, isLt := hi }).cost (List.get ms { val := j, isLt := hj }).cost = false) ā§ ((List.get ms { val := i, isLt := hi }).last < (List.get ms { val := j, isLt := hj }).last ⨠Factory.le F (List.get ms { val := j, isLt := hj }).cost (List.get ms { val := i, isLt := hi }).cost = false)pareto_nondom F msαā: Type
F: Factory αā
ms: List Meas
h: last_decreasing ms ā§ cost_increasing F ms
i, j: ā
hi: i < List.length ms
hj: j < List.length ms
h_neq: ¬i = j
h_last: ā (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
h_cost: ā (i j : ā) (h_i : i < List.length ms) (h_j : j < List.length ms), i < j ā Factory.lt F (List.get ms { val := i, isLt := h_i }).cost (List.get ms { val := j, isLt := h_j }).cost
hā: i < j
inl((List.get ms { val := j, isLt := hj }).last < (List.get ms { val := i, isLt := hi }).last ⨠Factory.le F (List.get ms { val := i, isLt := hi }).cost (List.get ms { val := j, isLt := hj }).cost = false) ā§ ((List.get ms { val := i, isLt := hi }).last < (List.get ms { val := j, isLt := hj }).last ⨠Factory.le F (List.get ms { val := j, isLt := hj }).cost (List.get ms { val := i, isLt := hi }).cost = false)αā: Type
F: Factory αā
ms: List Meas
h: last_decreasing ms ā§ cost_increasing F ms
i, j: ā
hi: i < List.length ms
hj: j < List.length ms
h_neq: ¬i = j
h_last: ā (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
h_cost: ā (i j : ā) (h_i : i < List.length ms) (h_j : j < List.length ms), i < j ā Factory.lt F (List.get ms { val := i, isLt := h_i }).cost (List.get ms { val := j, isLt := h_j }).cost
hā: i = j ⨠j < i
inr((List.get ms { val := j, isLt := hj }).last < (List.get ms { val := i, isLt := hi }).last ⨠Factory.le F (List.get ms { val := i, isLt := hi }).cost (List.get ms { val := j, isLt := hj }).cost = false) ā§ ((List.get ms { val := i, isLt := hi }).last < (List.get ms { val := j, isLt := hj }).last ⨠Factory.le F (List.get ms { val := j, isLt := hj }).cost (List.get ms { val := i, isLt := hi }).cost = false)pareto_nondom F msαā: Type
F: Factory αā
ms: List Meas
h: last_decreasing ms ā§ cost_increasing F ms
i, j: ā
hi: i < List.length ms
hj: j < List.length ms
h_neq: ¬i = j
h_last: ā (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
h_cost: ā (i j : ā) (h_i : i < List.length ms) (h_j : j < List.length ms), i < j ā Factory.lt F (List.get ms { val := i, isLt := h_i }).cost (List.get ms { val := j, isLt := h_j }).cost
h_tri: i < j((List.get ms { val := j, isLt := hj }).last < (List.get ms { val := i, isLt := hi }).last ⨠Factory.le F (List.get ms { val := i, isLt := hi }).cost (List.get ms { val := j, isLt := hj }).cost = false) ā§ ((List.get ms { val := i, isLt := hi }).last < (List.get ms { val := j, isLt := hj }).last ⨠Factory.le F (List.get ms { val := j, isLt := hj }).cost (List.get ms { val := i, isLt := hi }).cost = false)αā: Type
F: Factory αā
ms: List Meas
h: last_decreasing ms ā§ cost_increasing F ms
i, j: ā
hi: i < List.length ms
hj: j < List.length ms
h_neq: ¬i = j
h_last: ā (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
h_tri: i < j
h_cost: Factory.lt F (List.get ms { val := i, isLt := hi }).cost (List.get ms { val := j, isLt := hj }).cost((List.get ms { val := j, isLt := hj }).last < (List.get ms { val := i, isLt := hi }).last ⨠Factory.le F (List.get ms { val := i, isLt := hi }).cost (List.get ms { val := j, isLt := hj }).cost = false) ā§ ((List.get ms { val := i, isLt := hi }).last < (List.get ms { val := j, isLt := hj }).last ⨠Factory.le F (List.get ms { val := j, isLt := hj }).cost (List.get ms { val := i, isLt := hi }).cost = false)αā: Type
F: Factory αā
ms: List Meas
h: last_decreasing ms ā§ cost_increasing F ms
i, j: ā
hi: i < List.length ms
hj: j < List.length ms
h_neq: ¬i = j
h_last: ā (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
h_cost: ā (i j : ā) (h_i : i < List.length ms) (h_j : j < List.length ms), i < j ā Factory.lt F (List.get ms { val := i, isLt := h_i }).cost (List.get ms { val := j, isLt := h_j }).cost
h_tri: i < j((List.get ms { val := j, isLt := hj }).last < (List.get ms { val := i, isLt := hi }).last ⨠Factory.le F (List.get ms { val := i, isLt := hi }).cost (List.get ms { val := j, isLt := hj }).cost = false) ā§ ((List.get ms { val := i, isLt := hi }).last < (List.get ms { val := j, isLt := hj }).last ⨠Factory.le F (List.get ms { val := j, isLt := hj }).cost (List.get ms { val := i, isLt := hi }).cost = false)αā: Type
F: Factory αā
ms: List Meas
h: last_decreasing ms ā§ cost_increasing F ms
i, j: ā
hi: i < List.length ms
hj: j < List.length ms
h_neq: ¬i = j
h_last: ā (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
h_tri: i < j
h_cost: 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: last_decreasing ms ā§ cost_increasing F ms
i, j: ā
hi: i < List.length ms
hj: j < List.length ms
h_neq: ¬i = j
h_last: ā (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
h_cost: ā (i j : ā) (h_i : i < List.length ms) (h_j : j < List.length ms), i < j ā Factory.lt F (List.get ms { val := i, isLt := h_i }).cost (List.get ms { val := j, isLt := h_j }).cost
h_tri: i < j((List.get ms { val := j, isLt := hj }).last < (List.get ms { val := i, isLt := hi }).last ⨠Factory.le F (List.get ms { val := i, isLt := hi }).cost (List.get ms { val := j, isLt := hj }).cost = false) ā§ ((List.get ms { val := i, isLt := hi }).last < (List.get ms { val := j, isLt := hj }).last ⨠Factory.le F (List.get ms { val := j, isLt := hj }).cost (List.get ms { val := i, isLt := hi }).cost = false)αā: Type
F: Factory αā
ms: List Meas
h: last_decreasing ms ā§ cost_increasing F ms
i, j: ā
hi: i < List.length ms
hj: j < List.length ms
h_neq: ¬i = j
h_last: ā (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
h_tri: i < j
h_cost: Factory.lt F (List.get ms { val := i, isLt := hi }).cost (List.get ms { val := j, isLt := hj }).cost
hFactory.le F (List.get ms { val := j, isLt := hj }).cost (List.get ms { val := i, isLt := hi }).cost = falseαā: Type
F: Factory αā
ms: List Meas
h: last_decreasing ms ā§ cost_increasing F ms
i, j: ā
hi: i < List.length ms
hj: j < List.length ms
h_neq: ¬i = j
h_last: ā (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
h_cost: ā (i j : ā) (h_i : i < List.length ms) (h_j : j < List.length ms), i < j ā Factory.lt F (List.get ms { val := i, isLt := h_i }).cost (List.get ms { val := j, isLt := h_j }).cost
h_tri: i < j((List.get ms { val := j, isLt := hj }).last < (List.get ms { val := i, isLt := hi }).last ⨠Factory.le F (List.get ms { val := i, isLt := hi }).cost (List.get ms { val := j, isLt := hj }).cost = false) ā§ ((List.get ms { val := i, isLt := hi }).last < (List.get ms { val := j, isLt := hj }).last ⨠Factory.le F (List.get ms { val := j, isLt := hj }).cost (List.get ms { val := i, isLt := hi }).cost = false)αā: Type
F: Factory αā
ms: List Meas
h: last_decreasing ms ā§ cost_increasing F ms
i, j: ā
hi: i < List.length ms
hj: j < List.length ms
h_neq: ¬i = j
h_last: ā (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
h_tri: i < j
h_cost: Factory.lt F (List.get ms { val := i, isLt := hi }).cost (List.get ms { val := j, isLt := hj }).cost
hFactory.le F (List.get ms { val := j, isLt := hj }).cost (List.get ms { val := i, isLt := hi }).cost = falseαā: Type
F: Factory αā
ms: List Meas
h: last_decreasing ms ā§ cost_increasing F ms
i, j: ā
hi: i < List.length ms
hj: j < List.length ms
h_neq: ¬i = j
h_last: ā (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
h_tri: i < j
h_cost: ¬Factory.le F (List.get ms { val := j, isLt := hj }).cost (List.get ms { val := i, isLt := hi }).cost = true
hFactory.le F (List.get ms { val := j, isLt := hj }).cost (List.get ms { val := i, isLt := hi }).cost = falseαā: Type
F: Factory αā
ms: List Meas
h: last_decreasing ms ā§ cost_increasing F ms
i, j: ā
hi: i < List.length ms
hj: j < List.length ms
h_neq: ¬i = j
h_last: ā (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
h_tri: i < j
h_cost: ¬Factory.le F (List.get ms { val := j, isLt := hj }).cost (List.get ms { val := i, isLt := hi }).cost = true
hFactory.le F (List.get ms { val := j, isLt := hj }).cost (List.get ms { val := i, isLt := hi }).cost = falseαā: Type
F: Factory αā
ms: List Meas
h: last_decreasing ms ā§ cost_increasing F ms
i, j: ā
hi: i < List.length ms
hj: j < List.length ms
h_neq: ¬i = j
h_last: ā (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
h_tri: i < j
h_cost: ¬Factory.le F (List.get ms { val := j, isLt := hj }).cost (List.get ms { val := i, isLt := hi }).cost = true
hFactory.le F (List.get ms { val := j, isLt := hj }).cost (List.get ms { val := i, isLt := hi }).cost = falseαā: Type
F: Factory αā
ms: List Meas
h: last_decreasing ms ā§ cost_increasing F ms
i, j: ā
hi: i < List.length ms
hj: j < List.length ms
h_neq: ¬i = j
h_last: ā (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
h_cost: ā (i j : ā) (h_i : i < List.length ms) (h_j : j < List.length ms), i < j ā Factory.lt F (List.get ms { val := i, isLt := h_i }).cost (List.get ms { val := j, isLt := h_j }).cost
h_tri: i < j((List.get ms { val := j, isLt := hj }).last < (List.get ms { val := i, isLt := hi }).last ⨠Factory.le F (List.get ms { val := i, isLt := hi }).cost (List.get ms { val := j, isLt := hj }).cost = false) ā§ ((List.get ms { val := i, isLt := hi }).last < (List.get ms { val := j, isLt := hj }).last ⨠Factory.le F (List.get ms { val := j, isLt := hj }).cost (List.get ms { val := i, isLt := hi }).cost = false)αā: Type
F: Factory αā
ms: List Meas
h: last_decreasing ms ā§ cost_increasing F ms
i, j: ā
hi: i < List.length ms
hj: j < List.length ms
h_neq: ¬i = j
h_last: ā (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
h_tri: i < j
h_cost: Factory.le F (List.get ms { val := j, isLt := hj }).cost (List.get ms { val := i, isLt := hi }).cost = false
hFactory.le F (List.get ms { val := j, isLt := hj }).cost (List.get ms { val := i, isLt := hi }).cost = falseαā: Type
F: Factory αā
ms: List Meas
h: last_decreasing ms ā§ cost_increasing F ms
i, j: ā
hi: i < List.length ms
hj: j < List.length ms
h_neq: ¬i = j
h_last: ā (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
h_cost: ā (i j : ā) (h_i : i < List.length ms) (h_j : j < List.length ms), i < j ā Factory.lt F (List.get ms { val := i, isLt := h_i }).cost (List.get ms { val := j, isLt := h_j }).cost
h_tri: i < j((List.get ms { val := j, isLt := hj }).last < (List.get ms { val := i, isLt := hi }).last ⨠Factory.le F (List.get ms { val := i, isLt := hi }).cost (List.get ms { val := j, isLt := hj }).cost = false) ā§ ((List.get ms { val := i, isLt := hi }).last < (List.get ms { val := j, isLt := hj }).last ⨠Factory.le F (List.get ms { val := j, isLt := hj }).cost (List.get ms { val := i, isLt := hi }).cost = false)Goals accomplished! špareto_nondom F msαā: Type
F: Factory αā
ms: List Meas
h: last_decreasing ms ā§ cost_increasing F ms
i, j: ā
hi: i < List.length ms
hj: j < List.length ms
h_neq: ¬i = j
h_last: ā (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
h_cost: ā (i j : ā) (h_i : i < List.length ms) (h_j : j < List.length ms), i < j ā Factory.lt F (List.get ms { val := i, isLt := h_i }).cost (List.get ms { val := j, isLt := h_j }).cost
h_tri: i = j ⨠j < i((List.get ms { val := j, isLt := hj }).last < (List.get ms { val := i, isLt := hi }).last ⨠Factory.le F (List.get ms { val := i, isLt := hi }).cost (List.get ms { val := j, isLt := hj }).cost = false) ā§ ((List.get ms { val := i, isLt := hi }).last < (List.get ms { val := j, isLt := hj }).last ⨠Factory.le F (List.get ms { val := j, isLt := hj }).cost (List.get ms { val := i, isLt := hi }).cost = false)αā: Type
F: Factory αā
ms: List Meas
h: last_decreasing ms ā§ cost_increasing F ms
i, j: ā
hi: i < List.length ms
hj: j < List.length ms
h_neq: ¬i = j
h_last: ā (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
h_cost: ā (i j : ā) (h_i : i < List.length ms) (h_j : j < List.length ms), i < j ā Factory.lt F (List.get ms { val := i, isLt := h_i }).cost (List.get ms { val := j, isLt := h_j }).cost
hā: i = j
inl((List.get ms { val := j, isLt := hj }).last < (List.get ms { val := i, isLt := hi }).last ⨠Factory.le F (List.get ms { val := i, isLt := hi }).cost (List.get ms { val := j, isLt := hj }).cost = false) ā§ ((List.get ms { val := i, isLt := hi }).last < (List.get ms { val := j, isLt := hj }).last ⨠Factory.le F (List.get ms { val := j, isLt := hj }).cost (List.get ms { val := i, isLt := hi }).cost = false)αā: Type
F: Factory αā
ms: List Meas
h: last_decreasing ms ā§ cost_increasing F ms
i, j: ā
hi: i < List.length ms
hj: j < List.length ms
h_neq: ¬i = j
h_last: ā (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
h_cost: ā (i j : ā) (h_i : i < List.length ms) (h_j : j < List.length ms), i < j ā Factory.lt F (List.get ms { val := i, isLt := h_i }).cost (List.get ms { val := j, isLt := h_j }).cost
hā: j < i
inr((List.get ms { val := j, isLt := hj }).last < (List.get ms { val := i, isLt := hi }).last ⨠Factory.le F (List.get ms { val := i, isLt := hi }).cost (List.get ms { val := j, isLt := hj }).cost = false) ā§ ((List.get ms { val := i, isLt := hi }).last < (List.get ms { val := j, isLt := hj }).last ⨠Factory.le F (List.get ms { val := j, isLt := hj }).cost (List.get ms { val := i, isLt := hi }).cost = false)αā: Type
F: Factory αā
ms: List Meas
h: last_decreasing ms ā§ cost_increasing F ms
i, j: ā
hi: i < List.length ms
hj: j < List.length ms
h_neq: ¬i = j
h_last: ā (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
h_cost: ā (i j : ā) (h_i : i < List.length ms) (h_j : j < List.length ms), i < j ā Factory.lt F (List.get ms { val := i, isLt := h_i }).cost (List.get ms { val := j, isLt := h_j }).cost
h_tri: i = j ⨠j < i((List.get ms { val := j, isLt := hj }).last < (List.get ms { val := i, isLt := hi }).last ⨠Factory.le F (List.get ms { val := i, isLt := hi }).cost (List.get ms { val := j, isLt := hj }).cost = false) ā§ ((List.get ms { val := i, isLt := hi }).last < (List.get ms { val := j, isLt := hj }).last ⨠Factory.le F (List.get ms { val := j, isLt := hj }).cost (List.get ms { val := i, isLt := hi }).cost = false)αā: Type
F: Factory αā
ms: List Meas
h: last_decreasing ms ā§ cost_increasing F ms
i, j: ā
hi: i < List.length ms
hj: j < List.length ms
h_neq: ¬i = j
h_last: ā (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
h_cost: ā (i j : ā) (h_i : i < List.length ms) (h_j : j < List.length ms), i < j ā Factory.lt F (List.get ms { val := i, isLt := h_i }).cost (List.get ms { val := j, isLt := h_j }).cost
h_tri: i = j((List.get ms { val := j, isLt := hj }).last < (List.get ms { val := i, isLt := hi }).last ⨠Factory.le F (List.get ms { val := i, isLt := hi }).cost (List.get ms { val := j, isLt := hj }).cost = false) ā§ ((List.get ms { val := i, isLt := hi }).last < (List.get ms { val := j, isLt := hj }).last ⨠Factory.le F (List.get ms { val := j, isLt := hj }).cost (List.get ms { val := i, isLt := hi }).cost = false)Goals accomplished! šĪ±ā: Type
F: Factory αā
ms: List Meas
h: last_decreasing ms ā§ cost_increasing F ms
i, j: ā
hi: i < List.length ms
hj: j < List.length ms
h_neq: ¬i = j
h_last: ā (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
h_cost: ā (i j : ā) (h_i : i < List.length ms) (h_j : j < List.length ms), i < j ā Factory.lt F (List.get ms { val := i, isLt := h_i }).cost (List.get ms { val := j, isLt := h_j }).cost
h_tri: i = j ⨠j < i((List.get ms { val := j, isLt := hj }).last < (List.get ms { val := i, isLt := hi }).last ⨠Factory.le F (List.get ms { val := i, isLt := hi }).cost (List.get ms { val := j, isLt := hj }).cost = false) ā§ ((List.get ms { val := i, isLt := hi }).last < (List.get ms { val := j, isLt := hj }).last ⨠Factory.le F (List.get ms { val := j, isLt := hj }).cost (List.get ms { val := i, isLt := hi }).cost = false)αā: Type
F: Factory αā
ms: List Meas
h: last_decreasing ms ā§ cost_increasing F ms
i, j: ā
hi: i < List.length ms
hj: j < List.length ms
h_neq: ¬i = j
h_last: ā (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
h_cost: ā (i j : ā) (h_i : i < List.length ms) (h_j : j < List.length ms), i < j ā Factory.lt F (List.get ms { val := i, isLt := h_i }).cost (List.get ms { val := j, isLt := h_j }).cost
h_tri: j < i((List.get ms { val := j, isLt := hj }).last < (List.get ms { val := i, isLt := hi }).last ⨠Factory.le F (List.get ms { val := i, isLt := hi }).cost (List.get ms { val := j, isLt := hj }).cost = false) ā§ ((List.get ms { val := i, isLt := hi }).last < (List.get ms { val := j, isLt := hj }).last ⨠Factory.le F (List.get ms { val := j, isLt := hj }).cost (List.get ms { val := i, isLt := hi }).cost = false)αā: Type
F: Factory αā
ms: List Meas
h: last_decreasing ms ā§ cost_increasing F ms
i, j: ā
hi: i < List.length ms
hj: j < List.length ms
h_neq: ¬i = j
h_last: ā (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
h_tri: j < i
h_cost: Factory.lt F (List.get ms { val := j, isLt := hj }).cost (List.get ms { val := i, isLt := hi }).cost((List.get ms { val := j, isLt := hj }).last < (List.get ms { val := i, isLt := hi }).last ⨠Factory.le F (List.get ms { val := i, isLt := hi }).cost (List.get ms { val := j, isLt := hj }).cost = false) ā§ ((List.get ms { val := i, isLt := hi }).last < (List.get ms { val := j, isLt := hj }).last ⨠Factory.le F (List.get ms { val := j, isLt := hj }).cost (List.get ms { val := i, isLt := hi }).cost = false)αā: Type
F: Factory αā
ms: List Meas
h: last_decreasing ms ā§ cost_increasing F ms
i, j: ā
hi: i < List.length ms
hj: j < List.length ms
h_neq: ¬i = j
h_last: ā (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
h_cost: ā (i j : ā) (h_i : i < List.length ms) (h_j : j < List.length ms), i < j ā Factory.lt F (List.get ms { val := i, isLt := h_i }).cost (List.get ms { val := j, isLt := h_j }).cost
h_tri: j < i((List.get ms { val := j, isLt := hj }).last < (List.get ms { val := i, isLt := hi }).last ⨠Factory.le F (List.get ms { val := i, isLt := hi }).cost (List.get ms { val := j, isLt := hj }).cost = false) ā§ ((List.get ms { val := i, isLt := hi }).last < (List.get ms { val := j, isLt := hj }).last ⨠Factory.le F (List.get ms { val := j, isLt := hj }).cost (List.get ms { val := i, isLt := hi }).cost = false)αā: Type
F: Factory αā
ms: List Meas
h: last_decreasing ms ā§ cost_increasing F ms
i, j: ā
hi: i < List.length ms
hj: j < List.length ms
h_neq: ¬i = j
h_last: ā (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
h_tri: j < i
h_cost: Factory.lt F (List.get ms { val := j, isLt := hj }).cost (List.get ms { val := i, isLt := hi }).costαā: Type
F: Factory αā
ms: List Meas
h: last_decreasing ms ā§ cost_increasing F ms
i, j: ā
hi: i < List.length ms
hj: j < List.length ms
h_neq: ¬i = j
h_last: ā (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
h_cost: ā (i j : ā) (h_i : i < List.length ms) (h_j : j < List.length ms), i < j ā Factory.lt F (List.get ms { val := i, isLt := h_i }).cost (List.get ms { val := j, isLt := h_j }).cost
h_tri: j < i((List.get ms { val := j, isLt := hj }).last < (List.get ms { val := i, isLt := hi }).last ⨠Factory.le F (List.get ms { val := i, isLt := hi }).cost (List.get ms { val := j, isLt := hj }).cost = false) ā§ ((List.get ms { val := i, isLt := hi }).last < (List.get ms { val := j, isLt := hj }).last ⨠Factory.le F (List.get ms { val := j, isLt := hj }).cost (List.get ms { val := i, isLt := hi }).cost = false)αā: Type
F: Factory αā
ms: List Meas
h: last_decreasing ms ā§ cost_increasing F ms
i, j: ā
hi: i < List.length ms
hj: j < List.length ms
h_neq: ¬i = j
h_last: ā (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
h_tri: j < i
h_cost: Factory.lt F (List.get ms { val := j, isLt := hj }).cost (List.get ms { val := i, isLt := hi }).cost
hFactory.le F (List.get ms { val := i, isLt := hi }).cost (List.get ms { val := j, isLt := hj }).cost = falseαā: Type
F: Factory αā
ms: List Meas
h: last_decreasing ms ā§ cost_increasing F ms
i, j: ā
hi: i < List.length ms
hj: j < List.length ms
h_neq: ¬i = j
h_last: ā (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
h_cost: ā (i j : ā) (h_i : i < List.length ms) (h_j : j < List.length ms), i < j ā Factory.lt F (List.get ms { val := i, isLt := h_i }).cost (List.get ms { val := j, isLt := h_j }).cost
h_tri: j < i((List.get ms { val := j, isLt := hj }).last < (List.get ms { val := i, isLt := hi }).last ⨠Factory.le F (List.get ms { val := i, isLt := hi }).cost (List.get ms { val := j, isLt := hj }).cost = false) ā§ ((List.get ms { val := i, isLt := hi }).last < (List.get ms { val := j, isLt := hj }).last ⨠Factory.le F (List.get ms { val := j, isLt := hj }).cost (List.get ms { val := i, isLt := hi }).cost = false)αā: Type
F: Factory αā
ms: List Meas
h: last_decreasing ms ā§ cost_increasing F ms
i, j: ā
hi: i < List.length ms
hj: j < List.length ms
h_neq: ¬i = j
h_last: ā (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
h_tri: j < i
h_cost: Factory.lt F (List.get ms { val := j, isLt := hj }).cost (List.get ms { val := i, isLt := hi }).cost
hFactory.le F (List.get ms { val := i, isLt := hi }).cost (List.get ms { val := j, isLt := hj }).cost = falseαā: Type
F: Factory αā
ms: List Meas
h: last_decreasing ms ā§ cost_increasing F ms
i, j: ā
hi: i < List.length ms
hj: j < List.length ms
h_neq: ¬i = j
h_last: ā (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
h_tri: j < i
h_cost: ¬Factory.le F (List.get ms { val := i, isLt := hi }).cost (List.get ms { val := j, isLt := hj }).cost = true
hFactory.le F (List.get ms { val := i, isLt := hi }).cost (List.get ms { val := j, isLt := hj }).cost = falseαā: Type
F: Factory αā
ms: List Meas
h: last_decreasing ms ā§ cost_increasing F ms
i, j: ā
hi: i < List.length ms
hj: j < List.length ms
h_neq: ¬i = j
h_last: ā (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
h_tri: j < i
h_cost: ¬Factory.le F (List.get ms { val := i, isLt := hi }).cost (List.get ms { val := j, isLt := hj }).cost = true
hFactory.le F (List.get ms { val := i, isLt := hi }).cost (List.get ms { val := j, isLt := hj }).cost = falseαā: Type
F: Factory αā
ms: List Meas
h: last_decreasing ms ā§ cost_increasing F ms
i, j: ā
hi: i < List.length ms
hj: j < List.length ms
h_neq: ¬i = j
h_last: ā (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
h_tri: j < i
h_cost: ¬Factory.le F (List.get ms { val := i, isLt := hi }).cost (List.get ms { val := j, isLt := hj }).cost = true
hFactory.le F (List.get ms { val := i, isLt := hi }).cost (List.get ms { val := j, isLt := hj }).cost = falseαā: Type
F: Factory αā
ms: List Meas
h: last_decreasing ms ā§ cost_increasing F ms
i, j: ā
hi: i < List.length ms
hj: j < List.length ms
h_neq: ¬i = j
h_last: ā (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
h_cost: ā (i j : ā) (h_i : i < List.length ms) (h_j : j < List.length ms), i < j ā Factory.lt F (List.get ms { val := i, isLt := h_i }).cost (List.get ms { val := j, isLt := h_j }).cost
h_tri: j < i((List.get ms { val := j, isLt := hj }).last < (List.get ms { val := i, isLt := hi }).last ⨠Factory.le F (List.get ms { val := i, isLt := hi }).cost (List.get ms { val := j, isLt := hj }).cost = false) ā§ ((List.get ms { val := i, isLt := hi }).last < (List.get ms { val := j, isLt := hj }).last ⨠Factory.le F (List.get ms { val := j, isLt := hj }).cost (List.get ms { val := i, isLt := hi }).cost = false)αā: Type
F: Factory αā
ms: List Meas
h: last_decreasing ms ā§ cost_increasing F ms
i, j: ā
hi: i < List.length ms
hj: j < List.length ms
h_neq: ¬i = j
h_last: ā (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
h_tri: j < i
h_cost: Factory.le F (List.get ms { val := i, isLt := hi }).cost (List.get ms { val := j, isLt := hj }).cost = false
hFactory.le F (List.get ms { val := i, isLt := hi }).cost (List.get ms { val := j, isLt := hj }).cost = falseαā: Type
F: Factory αā
ms: List Meas
h: last_decreasing ms ā§ cost_increasing F ms
i, j: ā
hi: i < List.length ms
hj: j < List.length ms
h_neq: ¬i = j
h_last: ā (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
h_cost: ā (i j : ā) (h_i : i < List.length ms) (h_j : j < List.length ms), i < j ā Factory.lt F (List.get ms { val := i, isLt := h_i }).cost (List.get ms { val := j, isLt := h_j }).cost
h_tri: j < i((List.get ms { val := j, isLt := hj }).last < (List.get ms { val := i, isLt := hi }).last ⨠Factory.le F (List.get ms { val := i, isLt := hi }).cost (List.get ms { val := j, isLt := hj }).cost = false) ā§ ((List.get ms { val := i, isLt := hi }).last < (List.get ms { val := j, isLt := hj }).last ⨠Factory.le F (List.get ms { val := j, isLt := hj }).cost (List.get ms { val := i, isLt := hi }).cost = false)Goals accomplished! špareto F ms ā pareto_nondom F ms ā§ last_decreasing msGoals accomplished! špareto F ms ā pareto_nondom F ms ā§ last_decreasing mspareto_nondom F ms ā§ last_decreasing ms ā pareto F ms
intropareto F mspareto_nondom F ms ā§ last_decreasing ms ā pareto F ms
introā (i : ā) (hi : i < List.length ms) (hj : i + 1 < List.length ms), Factory.lt F (List.get ms { val := i, isLt := hi }).cost (List.get ms { val := i + 1, isLt := hj }).costpareto_nondom F ms ā§ last_decreasing ms ā pareto F msαā: Type
F: Factory αā
ms: List Meas
h_pareto: pareto_nondom F ms
h_last: last_decreasing ms
i: ā
hi: i < List.length ms
hj: i + 1 < List.length ms
introFactory.lt F (List.get ms { val := i, isLt := hi }).cost (List.get ms { val := i + 1, isLt := hj }).costpareto_nondom F ms ā§ last_decreasing ms ā pareto F msαā: Type
F: Factory αā
ms: List Meas
h_pareto: pareto_nondom F ms
i: ā
hi: i < List.length ms
hj: i + 1 < List.length ms
h_last: (List.get ms { val := i, isLt := hi }).last > (List.get ms { val := i + 1, isLt := hj }).last
introFactory.lt F (List.get ms { val := i, isLt := hi }).cost (List.get ms { val := i + 1, isLt := hj }).costpareto_nondom F ms ā§ last_decreasing ms ā pareto F msαā: Type
F: Factory αā
ms: List Meas
h_pareto: pareto_nondom F ms
i: ā
hi: i < List.length ms
hj: i + 1 < List.length ms
h_last: (List.get ms { val := i, isLt := hi }).last > (List.get ms { val := i + 1, isLt := hj }).last
introFactory.lt F (List.get ms { val := i, isLt := hi }).cost (List.get ms { val := i + 1, isLt := hj }).costGoals accomplished! šGoals accomplished! šĪ±ā: Type
F: Factory αā
ms: List Meas
i: ā
hi: i < List.length ms
hj: i + 1 < List.length ms
h_last: (List.get ms { val := i, isLt := hi }).last > (List.get ms { val := i + 1, isLt := hj }).last
h_pareto: ¬dominates F (List.get ms { val := i, isLt := hi }) (List.get ms { val := i + 1, isLt := hj }) = true ⧠¬dominates F (List.get ms { val := i + 1, isLt := hj }) (List.get ms { val := i, isLt := hi }) = true
introFactory.lt F (List.get ms { val := i, isLt := hi }).cost (List.get ms { val := i + 1, isLt := hj }).costpareto_nondom F ms ā§ last_decreasing ms ā pareto F msαā: Type
F: Factory αā
ms: List Meas
i: ā
hi: i < List.length ms
hj: i + 1 < List.length ms
h_last: (List.get ms { val := i, isLt := hi }).last > (List.get ms { val := i + 1, isLt := hj }).last
h_pareto: ((List.get ms { val := i, isLt := hi }).last ⤠(List.get ms { val := i + 1, isLt := hj }).last ā Factory.le F (List.get ms { val := i, isLt := hi }).cost (List.get ms { val := i + 1, isLt := hj }).cost = false) ā§ ((List.get ms { val := i + 1, isLt := hj }).last ⤠(List.get ms { val := i, isLt := hi }).last ā Factory.le F (List.get ms { val := i + 1, isLt := hj }).cost (List.get ms { val := i, isLt := hi }).cost = false)
introFactory.lt F (List.get ms { val := i, isLt := hi }).cost (List.get ms { val := i + 1, isLt := hj }).costpareto_nondom F ms ā§ last_decreasing ms ā pareto F msαā: Type
F: Factory αā
ms: List Meas
i: ā
hi: i < List.length ms
hj: i + 1 < List.length ms
h_last: (List.get ms { val := i, isLt := hi }).last > (List.get ms { val := i + 1, isLt := hj }).last
h_pareto: (List.get ms { val := i + 1, isLt := hj }).last ⤠(List.get ms { val := i, isLt := hi }).last ā Factory.le F (List.get ms { val := i + 1, isLt := hj }).cost (List.get ms { val := i, isLt := hi }).cost = false
introFactory.lt F (List.get ms { val := i, isLt := hi }).cost (List.get ms { val := i + 1, isLt := hj }).costpareto_nondom F ms ā§ last_decreasing ms ā pareto F msαā: Type
F: Factory αā
ms: List Meas
i: ā
hi: i < List.length ms
hj: i + 1 < List.length ms
h_pareto: (List.get ms { val := i + 1, isLt := hj }).last ⤠(List.get ms { val := i, isLt := hi }).last ā Factory.le F (List.get ms { val := i + 1, isLt := hj }).cost (List.get ms { val := i, isLt := hi }).cost = false
h_last: (List.get ms { val := i + 1, isLt := hj }).last < (List.get ms { val := i, isLt := hi }).last
introFactory.lt F (List.get ms { val := i, isLt := hi }).cost (List.get ms { val := i + 1, isLt := hj }).costpareto_nondom F ms ā§ last_decreasing ms ā pareto F msαā: Type
F: Factory αā
ms: List Meas
i: ā
hi: i < List.length ms
hj: i + 1 < List.length ms
h_pareto: (List.get ms { val := i + 1, isLt := hj }).last ⤠(List.get ms { val := i, isLt := hi }).last ā Factory.le F (List.get ms { val := i + 1, isLt := hj }).cost (List.get ms { val := i, isLt := hi }).cost = false
h_last: (List.get ms { val := i + 1, isLt := hj }).last ⤠(List.get ms { val := i, isLt := hi }).last
introFactory.lt F (List.get ms { val := i, isLt := hi }).cost (List.get ms { val := i + 1, isLt := hj }).costpareto_nondom F ms ā§ last_decreasing ms ā pareto F msαā: Type
F: Factory αā
ms: List Meas
i: ā
hi: i < List.length ms
hj: i + 1 < List.length ms
h_last: (List.get ms { val := i + 1, isLt := hj }).last ⤠(List.get ms { val := i, isLt := hi }).last
h_pareto: Factory.le F (List.get ms { val := i + 1, isLt := hj }).cost (List.get ms { val := i, isLt := hi }).cost = false
introFactory.lt F (List.get ms { val := i, isLt := hi }).cost (List.get ms { val := i + 1, isLt := hj }).costpareto_nondom F ms ā§ last_decreasing ms ā pareto F msαā: Type
F: Factory αā
ms: List Meas
i: ā
hi: i < List.length ms
hj: i + 1 < List.length ms
h_last: (List.get ms { val := i + 1, isLt := hj }).last ⤠(List.get ms { val := i, isLt := hi }).last
h_pareto: Factory.le F (List.get ms { val := i + 1, isLt := hj }).cost (List.get ms { val := i, isLt := hi }).cost = false
introFactory.lt F (List.get ms { val := i, isLt := hi }).cost (List.get ms { val := i + 1, isLt := hj }).costαā: Type
F: Factory αā
ms: List Meas
i: ā
hi: i < List.length ms
hj: i + 1 < List.length ms
h_last: (List.get ms { val := i + 1, isLt := hj }).last ⤠(List.get ms { val := i, isLt := hi }).last
h_pareto: Factory.le F (List.get ms { val := i + 1, isLt := hj }).cost (List.get ms { val := i, isLt := hi }).cost = false
introαā: Type
F: Factory αā
ms: List Meas
i: ā
hi: i < List.length ms
hj: i + 1 < List.length ms
h_last: (List.get ms { val := i + 1, isLt := hj }).last ⤠(List.get ms { val := i, isLt := hi }).last
h_pareto: Factory.le F (List.get ms { val := i + 1, isLt := hj }).cost (List.get ms { val := i, isLt := hi }).cost = false
intropareto_nondom F ms ā§ last_decreasing ms ā pareto F msαā: Type
F: Factory αā
ms: List Meas
i: ā
hi: i < List.length ms
hj: i + 1 < List.length ms
h_last: (List.get ms { val := i + 1, isLt := hj }).last ⤠(List.get ms { val := i, isLt := hi }).last
h_pareto: Factory.le F (List.get ms { val := i + 1, isLt := hj }).cost (List.get ms { val := i, isLt := hi }).cost = false
intropareto_nondom F ms ā§ last_decreasing ms ā pareto F msGoals accomplished! š