Built with doc-gen4, running Lean4. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑Ctrl+↓to navigate, Ctrl+🖱️to focus. On Mac, use Cmdinstead of Ctrl.
import Pretty.Defs.Basic
import Pretty.Supports.Domination

lemma 
merge_not_empty: ∀ {α : Type} {ms₁ ms₂ : List Meas} {F : Factory α}, ms₁ [] ms₂ []merge F (ms₁, ms₂) []
merge_not_empty
(
h: ms₁ [] ms₂ []
h
:
ms₁: ?m.5
ms₁
[]: List ?m.44
[]
ms₂: ?m.17
ms₂
[]: List ?m.50
[]
) : @
merge: {α : Type} → Factory αList Meas × List MeasList Meas
merge
_: Type
_
F: ?m.38
F
ms₁: ?m.5
ms₁
,
ms₂: ?m.17
ms₂
⟩ ≠
[]: List ?m.73
[]
:=

Goals accomplished! 🐙
α✝: Type

ms₁, ms₂: List Meas

F: Factory α✝

h: ms₁ [] ms₂ []


merge F (ms₁, ms₂) []
α✝: Type

F: Factory α✝

ms₂: List Meas

h: [] [] ms₂ []


nil
merge F ([], ms₂) []
α✝: Type

F: Factory α✝

head✝: Meas

tail✝: List Meas

tail_ih✝: ∀ {ms₂ : List Meas}, tail✝ [] ms₂ []merge F (tail✝, ms₂) []

ms₂: List Meas

h: head✝ :: tail✝ [] ms₂ []


cons
merge F (head✝ :: tail✝, ms₂) []
α✝: Type

ms₁, ms₂: List Meas

F: Factory α✝

h: ms₁ [] ms₂ []


merge F (ms₁, ms₂) []
α✝: Type

F: Factory α✝

ms₂: List Meas

h: [] [] ms₂ []


merge F ([], ms₂) []
α✝: Type

F: Factory α✝

ms₂: List Meas

h: [] [] ms₂ []


merge F ([], ms₂) []
α✝: Type

F: Factory α✝

ms₂: List Meas

h✝: [] []


inl
merge F ([], ms₂) []
α✝: Type

F: Factory α✝

ms₂: List Meas

h✝: ms₂ []


inr
merge F ([], ms₂) []
α✝: Type

F: Factory α✝

ms₂: List Meas

h✝: ms₂ []


inr
merge F ([], ms₂) []
α✝: Type

F: Factory α✝

ms₂: List Meas

h: [] [] ms₂ []


merge F ([], ms₂) []
α✝: Type

F: Factory α✝

ms₂: List Meas

h✝: ms₂ []


merge F ([], ms₂) []

Goals accomplished! 🐙
α✝: Type

ms₁, ms₂: List Meas

F: Factory α✝

h: ms₁ [] ms₂ []


merge F (ms₁, ms₂) []
α✝: Type

F: Factory α✝

m₁: Meas

ms₁: List Meas

ih₁: ∀ {ms₂ : List Meas}, ms₁ [] ms₂ []merge F (ms₁, ms₂) []

ms₂: List Meas

h: m₁ :: ms₁ [] ms₂ []


merge F (m₁ :: ms₁, ms₂) []
α✝: Type

F: Factory α✝

m₁: Meas

ms₁: List Meas

ih₁: ∀ {ms₂ : List Meas}, ms₁ [] ms₂ []merge F (ms₁, ms₂) []

h: m₁ :: ms₁ [] [] []


nil
merge F (m₁ :: ms₁, []) []
α✝: Type

F: Factory α✝

m₁: Meas

ms₁: List Meas

ih₁: ∀ {ms₂ : List Meas}, ms₁ [] ms₂ []merge F (ms₁, ms₂) []

head✝: Meas

tail✝: List Meas

tail_ih✝: m₁ :: ms₁ [] tail✝ []merge F (m₁ :: ms₁, tail✝) []

h: m₁ :: ms₁ [] head✝ :: tail✝ []


cons
merge F (m₁ :: ms₁, head✝ :: tail✝) []
α✝: Type

F: Factory α✝

m₁: Meas

ms₁: List Meas

ih₁: ∀ {ms₂ : List Meas}, ms₁ [] ms₂ []merge F (ms₁, ms₂) []

ms₂: List Meas

h: m₁ :: ms₁ [] ms₂ []


merge F (m₁ :: ms₁, ms₂) []
α✝: Type

F: Factory α✝

m₁: Meas

ms₁: List Meas

ih₁: ∀ {ms₂ : List Meas}, ms₁ [] ms₂ []merge F (ms₁, ms₂) []

h: m₁ :: ms₁ [] [] []


merge F (m₁ :: ms₁, []) []
α✝: Type

F: Factory α✝

m₁: Meas

ms₁: List Meas

ih₁: ∀ {ms₂ : List Meas}, ms₁ [] ms₂ []merge F (ms₁, ms₂) []

h: m₁ :: ms₁ [] [] []


merge F (m₁ :: ms₁, []) []
α✝: Type

F: Factory α✝

m₁: Meas

ms₁: List Meas

ih₁: ∀ {ms₂ : List Meas}, ms₁ [] ms₂ []merge F (ms₁, ms₂) []

h✝: m₁ :: ms₁ []


inl
merge F (m₁ :: ms₁, []) []
α✝: Type

F: Factory α✝

m₁: Meas

ms₁: List Meas

ih₁: ∀ {ms₂ : List Meas}, ms₁ [] ms₂ []merge F (ms₁, ms₂) []

h✝: [] []


inr
merge F (m₁ :: ms₁, []) []

Goals accomplished! 🐙
α✝: Type

F: Factory α✝

m₁: Meas

ms₁: List Meas

ih₁: ∀ {ms₂ : List Meas}, ms₁ [] ms₂ []merge F (ms₁, ms₂) []

ms₂: List Meas

h: m₁ :: ms₁ [] ms₂ []


merge F (m₁ :: ms₁, ms₂) []
α✝: Type

F: Factory α✝

m₁: Meas

ms₁: List Meas

ih₁: ∀ {ms₂ : List Meas}, ms₁ [] ms₂ []merge F (ms₁, ms₂) []

m₂: Meas

ms₂: List Meas

ih₂: m₁ :: ms₁ [] ms₂ []merge F (m₁ :: ms₁, ms₂) []

h: m₁ :: ms₁ [] m₂ :: ms₂ []


merge F (m₁ :: ms₁, m₂ :: ms₂) []
α✝: Type

F: Factory α✝

m₁: Meas

ms₁: List Meas

ih₁: ∀ {ms₂ : List Meas}, ms₁ [] ms₂ []merge F (ms₁, ms₂) []

m₂: Meas

ms₂: List Meas

ih₂: m₁ :: ms₁ [] ms₂ []merge F (m₁ :: ms₁, ms₂) []

h: m₁ :: ms₁ [] m₂ :: ms₂ []

h_dom✝: dominates F m₁ m₂ = true


first_dom
merge F (m₁ :: ms₁, m₂ :: ms₂) []
α✝: Type

F: Factory α✝

m₁: Meas

ms₁: List Meas

ih₁: ∀ {ms₂ : List Meas}, ms₁ [] ms₂ []merge F (ms₁, ms₂) []

m₂: Meas

ms₂: List Meas

ih₂: m₁ :: ms₁ [] ms₂ []merge F (m₁ :: ms₁, ms₂) []

h: m₁ :: ms₁ [] m₂ :: ms₂ []

h_non_dom✝: ¬dominates F m₁ m₂ = true

h_dom✝: dominates F m₂ m₁ = true


second_dom
merge F (m₁ :: ms₁, m₂ :: ms₂) []
α✝: Type

F: Factory α✝

m₁: Meas

ms₁: List Meas

ih₁: ∀ {ms₂ : List Meas}, ms₁ [] ms₂ []merge F (ms₁, ms₂) []

m₂: Meas

ms₂: List Meas

ih₂: m₁ :: ms₁ [] ms₂ []merge F (m₁ :: ms₁, ms₂) []

h: m₁ :: ms₁ [] m₂ :: ms₂ []

h_non_dom₁✝: ¬dominates F m₁ m₂ = true

h_non_dom₂✝: ¬dominates F m₂ m₁ = true

h✝: m₁.last > m₂.last


first_last
merge F (m₁ :: ms₁, m₂ :: ms₂) []
α✝: Type

F: Factory α✝

m₁: Meas

ms₁: List Meas

ih₁: ∀ {ms₂ : List Meas}, ms₁ [] ms₂ []merge F (ms₁, ms₂) []

m₂: Meas

ms₂: List Meas

ih₂: m₁ :: ms₁ [] ms₂ []merge F (m₁ :: ms₁, ms₂) []

h: m₁ :: ms₁ [] m₂ :: ms₂ []

h_non_dom₁✝: ¬dominates F m₁ m₂ = true

h_non_dom₂✝: ¬dominates F m₂ m₁ = true

h✝: m₂.last > m₁.last


second_last
merge F (m₁ :: ms₁, m₂ :: ms₂) []
α✝: Type

F: Factory α✝

m₁: Meas

ms₁: List Meas

ih₁: ∀ {ms₂ : List Meas}, ms₁ [] ms₂ []merge F (ms₁, ms₂) []

m₂: Meas

ms₂: List Meas

ih₂: m₁ :: ms₁ [] ms₂ []merge F (m₁ :: ms₁, ms₂) []

h: m₁ :: ms₁ [] m₂ :: ms₂ []


merge F (m₁ :: ms₁, m₂ :: ms₂) []
α✝: Type

F: Factory α✝

m₁: Meas

ms₁: List Meas

ih₁: ∀ {ms₂ : List Meas}, ms₁ [] ms₂ []merge F (ms₁, ms₂) []

m₂: Meas

ms₂: List Meas

ih₂: m₁ :: ms₁ [] ms₂ []merge F (m₁ :: ms₁, ms₂) []

h: m₁ :: ms₁ [] m₂ :: ms₂ []

h_non_dom✝: ¬dominates F m₁ m₂ = true

h_dom✝: dominates F m₂ m₁ = true


merge F (m₁ :: ms₁, m₂ :: ms₂) []

Goals accomplished! 🐙
α✝: Type

F: Factory α✝

m₁: Meas

ms₁: List Meas

ih₁: ∀ {ms₂ : List Meas}, ms₁ [] ms₂ []merge F (ms₁, ms₂) []

m₂: Meas

ms₂: List Meas

ih₂: m₁ :: ms₁ [] ms₂ []merge F (m₁ :: ms₁, ms₂) []

h: m₁ :: ms₁ [] m₂ :: ms₂ []


merge F (m₁ :: ms₁, m₂ :: ms₂) []
α✝: Type

F: Factory α✝

m₁: Meas

ms₁: List Meas

ih₁: ∀ {ms₂ : List Meas}, ms₁ [] ms₂ []merge F (ms₁, ms₂) []

m₂: Meas

ms₂: List Meas

ih₂: m₁ :: ms₁ [] ms₂ []merge F (m₁ :: ms₁, ms₂) []

h: m₁ :: ms₁ [] m₂ :: ms₂ []

h_non_dom₁✝: ¬dominates F m₁ m₂ = true

h_non_dom₂✝: ¬dominates F m₂ m₁ = true

h✝: m₁.last > m₂.last


merge F (m₁ :: ms₁, m₂ :: ms₂) []

Goals accomplished! 🐙
α✝: Type

F: Factory α✝

m₁: Meas

ms₁: List Meas

ih₁: ∀ {ms₂ : List Meas}, ms₁ [] ms₂ []merge F (ms₁, ms₂) []

m₂: Meas

ms₂: List Meas

ih₂: m₁ :: ms₁ [] ms₂ []merge F (m₁ :: ms₁, ms₂) []

h: m₁ :: ms₁ [] m₂ :: ms₂ []


merge F (m₁ :: ms₁, m₂ :: ms₂) []
α✝: Type

F: Factory α✝

m₁: Meas

ms₁: List Meas

ih₁: ∀ {ms₂ : List Meas}, ms₁ [] ms₂ []merge F (ms₁, ms₂) []

m₂: Meas

ms₂: List Meas

ih₂: m₁ :: ms₁ [] ms₂ []merge F (m₁ :: ms₁, ms₂) []

h: m₁ :: ms₁ [] m₂ :: ms₂ []

h_non_dom₁✝: ¬dominates F m₁ m₂ = true

h_non_dom₂✝: ¬dominates F m₂ m₁ = true

h✝: m₂.last > m₁.last


merge F (m₁ :: ms₁, m₂ :: ms₂) []
α✝: Type

F: Factory α✝

m₁: Meas

ms₁: List Meas

ih₁: ∀ {ms₂ : List Meas}, ms₁ [] ms₂ []merge F (ms₁, ms₂) []

m₂: Meas

ms₂: List Meas

ih₂: m₁ :: ms₁ [] ms₂ []merge F (m₁ :: ms₁, ms₂) []

h: m₁ :: ms₁ [] m₂ :: ms₂ []

h_non_dom₁✝: ¬dominates F m₁ m₂ = true

h_non_dom₂✝: ¬dominates F m₂ m₁ = true

h✝: m₂.last > m₁.last


merge F (m₁ :: ms₁, m₂ :: ms₂) []

Goals accomplished! 🐙
α✝: Type

F: Factory α✝

m₁: Meas

ms₁: List Meas

ih₁: ∀ {ms₂ : List Meas}, ms₁ [] ms₂ []merge F (ms₁, ms₂) []

m₂: Meas

ms₂: List Meas

ih₂: m₁ :: ms₁ [] ms₂ []merge F (m₁ :: ms₁, ms₂) []

h: m₁ :: ms₁ [] m₂ :: ms₂ []

h_non_dom₁✝: ¬dominates F m₁ m₂ = true

h_non_dom₂✝: ¬dominates F m₂ m₁ = true

h✝: m₂.last > m₁.last


¬m₁.last > m₂.last

Goals accomplished! 🐙
α✝: Type

F: Factory α✝

m₁: Meas

ms₁: List Meas

ih₁: ∀ {ms₂ : List Meas}, ms₁ [] ms₂ []merge F (ms₁, ms₂) []

m₂: Meas

ms₂: List Meas

ih₂: m₁ :: ms₁ [] ms₂ []merge F (m₁ :: ms₁, ms₂) []

h: m₁ :: ms₁ [] m₂ :: ms₂ []

h_non_dom₁✝: ¬dominates F m₁ m₂ = true

h_non_dom₂✝: ¬dominates F m₂ m₁ = true

h✝: m₂.last > m₁.last


merge F (m₁ :: ms₁, m₂ :: ms₂) []

Goals accomplished! 🐙