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.Claims.ResolveDet
import Pretty.Supports.DocSize

/-!
## Totality of resolving theorems
-/

mutual 
  /--
  The totality of resolving (Page 19, Section 5.6)
  -/
  theorem 
Resolve_total: ∀ {α : Type} (F : Factory α) (d : Doc) (c i : ), ms, Resolve F d c i ms
Resolve_total
(
F: Factory α
F
:
Factory: TypeType
Factory
α: ?m.3
α
) (
d: Doc
d
:
Doc: Type
Doc
) (
c:
c
i:
i
:
: Type
) : ∃
ms: ?m.17
ms
,
Resolve: {α : Type} → Factory αDocMeasureSetProp
Resolve
F: Factory α
F
d: Doc
d
c:
c
i:
i
ms: ?m.17
ms
:=

Goals accomplished! 🐙
α: Type

F: Factory α

d: Doc

c, i:


ms, Resolve F d c i ms
α: Type

F: Factory α

d: Doc

c, i:


ms, Resolve F d c i ms
α: Type

F: Factory α

d: Doc

c, i:

s: String


ms, Resolve F (Doc.text s) c i ms
α: Type

F: Factory α

d: Doc

c, i:


ms, Resolve F d c i ms
α: Type

F: Factory α

d: Doc

c, i:

s: String

h_i: i F.W


pos
ms, Resolve F (Doc.text s) c i ms
α: Type

F: Factory α

d: Doc

c, i:

s: String

h_i: ¬i F.W


neg
ms, Resolve F (Doc.text s) c i ms
α: Type

F: Factory α

d: Doc

c, i:

s: String


ms, Resolve F (Doc.text s) c i ms
α: Type

F: Factory α

d: Doc

c, i:

s: String

h_i: i F.W


ms, Resolve F (Doc.text s) c i ms
α: Type

F: Factory α

d: Doc

c, i:

s: String

h_i: i F.W

h_c: c + String.length s F.W


pos
ms, Resolve F (Doc.text s) c i ms
α: Type

F: Factory α

d: Doc

c, i:

s: String

h_i: i F.W

h_c: ¬c + String.length s F.W


neg
ms, Resolve F (Doc.text s) c i ms
α: Type

F: Factory α

d: Doc

c, i:

s: String

h_i: i F.W


ms, Resolve F (Doc.text s) c i ms
α: Type

F: Factory α

d: Doc

c, i:

s: String

h_i: i F.W

h_c: c + String.length s F.W


ms, Resolve F (Doc.text s) c i ms
α: Type

F: Factory α

d: Doc

c, i:

s: String

h_i: i F.W

h_c: c + String.length s F.W


ms, Resolve F (Doc.text s) c i ms

Goals accomplished! 🐙
α: Type

F: Factory α

d: Doc

c, i:

s: String

h_i: i F.W

h_c: c + String.length s F.W



Goals accomplished! 🐙
α: Type

F: Factory α

d: Doc

c, i:

s: String

h_i: i F.W

h_c: c + String.length s F.W

m: Meas

h: MeasRender F (Doc.text s) c i m


ms, Resolve F (Doc.text s) c i ms
α: Type

F: Factory α

d: Doc

c, i:

s: String

h_i: i F.W

h_c: c + String.length s F.W


ms, Resolve F (Doc.text s) c i ms
α: Type

F: Factory α

d: Doc

c, i:

s: String

h_i: i F.W

h_c: c + String.length s F.W

m: Meas

h: MeasRender F (Doc.text s) c i m


ms, Resolve F (Doc.text s) c i ms

Goals accomplished! 🐙
α: Type

F: Factory α

d: Doc

c, i:

s: String

h_i: i F.W

h_c: c + String.length s F.W

m: Meas

h: MeasRender F (Doc.text s) c i m


[m] []

Goals accomplished! 🐙
α: Type

F: Factory α

d: Doc

c, i:

s: String

h_i: i F.W

h_c: c + String.length s F.W

m: Meas

h: MeasRender F (Doc.text s) c i m


Resolve F (Doc.text s) c i (MeasureSet.set [m] (_ : ¬[m] = []))
α: Type

F: Factory α

d: Doc

c, i:

s: String

h_i: i F.W

h_c: c + String.length s F.W


ms, Resolve F (Doc.text s) c i ms
α: Type

F: Factory α

d: Doc

c, i:

s: String

h_i: i F.W

h_c: c + String.length s F.W

m: Meas

h: MeasRender F (Doc.text s) c i m


h_c
α: Type

F: Factory α

d: Doc

c, i:

s: String

h_i: i F.W

h_c: c + String.length s F.W

m: Meas

h: MeasRender F (Doc.text s) c i m


h_i
i F.W
α: Type

F: Factory α

d: Doc

c, i:

s: String

h_i: i F.W

h_c: c + String.length s F.W

m: Meas

h: MeasRender F (Doc.text s) c i m


h
MeasRender F (Doc.text s) c i m
α: Type

F: Factory α

d: Doc

c, i:

s: String

h_i: i F.W

h_c: c + String.length s F.W

m: Meas

h: MeasRender F (Doc.text s) c i m


Resolve F (Doc.text s) c i (MeasureSet.set [m] (_ : ¬[m] = []))
α: Type

F: Factory α

d: Doc

c, i:

s: String

h_i: i F.W

h_c: c + String.length s F.W

m: Meas

h: MeasRender F (Doc.text s) c i m


h_c
α: Type

F: Factory α

d: Doc

c, i:

s: String

h_i: i F.W

h_c: c + String.length s F.W

m: Meas

h: MeasRender F (Doc.text s) c i m


h_i
i F.W
α: Type

F: Factory α

d: Doc

c, i:

s: String

h_i: i F.W

h_c: c + String.length s F.W

m: Meas

h: MeasRender F (Doc.text s) c i m


h
MeasRender F (Doc.text s) c i m
α: Type

F: Factory α

d: Doc

c, i:

s: String

h_i: i F.W

h_c: c + String.length s F.W

m: Meas

h: MeasRender F (Doc.text s) c i m


Resolve F (Doc.text s) c i (MeasureSet.set [m] (_ : ¬[m] = []))

Goals accomplished! 🐙
α: Type

F: Factory α

d: Doc

c, i:

s: String

h_i: i F.W


ms, Resolve F (Doc.text s) c i ms
α: Type

F: Factory α

d: Doc

c, i:

s: String

h_i: i F.W

h_c: ¬c + String.length s F.W


ms, Resolve F (Doc.text s) c i ms
α: Type

F: Factory α

d: Doc

c, i:

s: String

h_i: i F.W

h_c: c + String.length s > F.W


ms, Resolve F (Doc.text s) c i ms
α: Type

F: Factory α

d: Doc

c, i:

s: String

h_i: i F.W

h_c: ¬c + String.length s F.W


ms, Resolve F (Doc.text s) c i ms
α: Type

F: Factory α

d: Doc

c, i:

s: String

h_i: i F.W

h_c: c + String.length s > F.W


ms, Resolve F (Doc.text s) c i ms

Goals accomplished! 🐙
α: Type

F: Factory α

d: Doc

c, i:

s: String

h_i: i F.W

h_c: c + String.length s > F.W



Goals accomplished! 🐙
α: Type

F: Factory α

d: Doc

c, i:

s: String

h_i: i F.W

h_c: c + String.length s > F.W

m: Meas

h: MeasRender F (Doc.text s) c i m


ms, Resolve F (Doc.text s) c i ms
α: Type

F: Factory α

d: Doc

c, i:

s: String

h_i: i F.W

h_c: ¬c + String.length s F.W


ms, Resolve F (Doc.text s) c i ms
α: Type

F: Factory α

d: Doc

c, i:

s: String

h_i: i F.W

h_c: c + String.length s > F.W

m: Meas

h: MeasRender F (Doc.text s) c i m


α: Type

F: Factory α

d: Doc

c, i:

s: String

h_i: i F.W

h_c: ¬c + String.length s F.W


ms, Resolve F (Doc.text s) c i ms
α: Type

F: Factory α

d: Doc

c, i:

s: String

h_i: i F.W

h_c: c + String.length s > F.W

m: Meas

h: MeasRender F (Doc.text s) c i m


h_bad
c + String.length s > F.W i > F.W
α: Type

F: Factory α

d: Doc

c, i:

s: String

h_i: i F.W

h_c: c + String.length s > F.W

m: Meas

h: MeasRender F (Doc.text s) c i m


h
MeasRender F (Doc.text s) c i m
α: Type

F: Factory α

d: Doc

c, i:

s: String

h_i: i F.W

h_c: ¬c + String.length s F.W


ms, Resolve F (Doc.text s) c i ms
α: Type

F: Factory α

d: Doc

c, i:

s: String

h_i: i F.W

h_c: c + String.length s > F.W

m: Meas

h: MeasRender F (Doc.text s) c i m


c + String.length s > F.W i > F.W

Goals accomplished! 🐙
α: Type

F: Factory α

d: Doc

c, i:

s: String

h_i: i F.W

h_c: ¬c + String.length s F.W


ms, Resolve F (Doc.text s) c i ms
α: Type

F: Factory α

d: Doc

c, i:

s: String

h_i: i F.W

h_c: c + String.length s > F.W

m: Meas

h: MeasRender F (Doc.text s) c i m


MeasRender F (Doc.text s) c i m

Goals accomplished! 🐙
α: Type

F: Factory α

d: Doc

c, i:

s: String


ms, Resolve F (Doc.text s) c i ms
α: Type

F: Factory α

d: Doc

c, i:

s: String

h_i: ¬i F.W


ms, Resolve F (Doc.text s) c i ms
α: Type

F: Factory α

d: Doc

c, i:

s: String

h_i: i > F.W


ms, Resolve F (Doc.text s) c i ms
α: Type

F: Factory α

d: Doc

c, i:

s: String

h_i: ¬i F.W


ms, Resolve F (Doc.text s) c i ms
α: Type

F: Factory α

d: Doc

c, i:

s: String

h_i: i > F.W


ms, Resolve F (Doc.text s) c i ms

Goals accomplished! 🐙
α: Type

F: Factory α

d: Doc

c, i:

s: String

h_i: i > F.W



Goals accomplished! 🐙
α: Type

F: Factory α

d: Doc

c, i:

s: String

h_i: i > F.W

m: Meas

h: MeasRender F (Doc.text s) c i m


ms, Resolve F (Doc.text s) c i ms
α: Type

F: Factory α

d: Doc

c, i:

s: String

h_i: ¬i F.W


ms, Resolve F (Doc.text s) c i ms
α: Type

F: Factory α

d: Doc

c, i:

s: String

h_i: i > F.W

m: Meas

h: MeasRender F (Doc.text s) c i m


α: Type

F: Factory α

d: Doc

c, i:

s: String

h_i: ¬i F.W


ms, Resolve F (Doc.text s) c i ms
α: Type

F: Factory α

d: Doc

c, i:

s: String

h_i: i > F.W

m: Meas

h: MeasRender F (Doc.text s) c i m


h_bad
c + String.length s > F.W i > F.W
α: Type

F: Factory α

d: Doc

c, i:

s: String

h_i: i > F.W

m: Meas

h: MeasRender F (Doc.text s) c i m


h
MeasRender F (Doc.text s) c i m
α: Type

F: Factory α

d: Doc

c, i:

s: String

h_i: ¬i F.W


ms, Resolve F (Doc.text s) c i ms
α: Type

F: Factory α

d: Doc

c, i:

s: String

h_i: i > F.W

m: Meas

h: MeasRender F (Doc.text s) c i m


c + String.length s > F.W i > F.W

Goals accomplished! 🐙
α: Type

F: Factory α

d: Doc

c, i:

s: String

h_i: ¬i F.W


ms, Resolve F (Doc.text s) c i ms
α: Type

F: Factory α

d: Doc

c, i:

s: String

h_i: i > F.W

m: Meas

h: MeasRender F (Doc.text s) c i m


MeasRender F (Doc.text s) c i m

Goals accomplished! 🐙
α: Type

F: Factory α

d: Doc

c, i:


ms, Resolve F d c i ms
α: Type

F: Factory α

d: Doc

c, i:


ms, Resolve F Doc.nl c i ms
α: Type

F: Factory α

d: Doc

c, i:


ms, Resolve F d c i ms
α: Type

F: Factory α

d: Doc

c, i:

h_i: i F.W


pos
ms, Resolve F Doc.nl c i ms
α: Type

F: Factory α

d: Doc

c, i:

h_i: ¬i F.W


neg
ms, Resolve F Doc.nl c i ms
α: Type

F: Factory α

d: Doc

c, i:


ms, Resolve F Doc.nl c i ms
α: Type

F: Factory α

d: Doc

c, i:

h_i: i F.W


ms, Resolve F Doc.nl c i ms
α: Type

F: Factory α

d: Doc

c, i:

h_i: i F.W


ms, Resolve F Doc.nl c i ms

Goals accomplished! 🐙
α: Type

F: Factory α

d: Doc

c, i:

h_i: i F.W



Goals accomplished! 🐙
α: Type

F: Factory α

d: Doc

c, i:

h_i: i F.W

m: Meas

h: MeasRender F Doc.nl c i m


ms, Resolve F Doc.nl c i ms
α: Type

F: Factory α

d: Doc

c, i:

h_i: i F.W


ms, Resolve F Doc.nl c i ms
α: Type

F: Factory α

d: Doc

c, i:

h_i: i F.W

m: Meas

h: MeasRender F Doc.nl c i m

h_c: c F.W


pos
ms, Resolve F Doc.nl c i ms
α: Type

F: Factory α

d: Doc

c, i:

h_i: i F.W

m: Meas

h: MeasRender F Doc.nl c i m

h_c: ¬c F.W


neg
ms, Resolve F Doc.nl c i ms
α: Type

F: Factory α

d: Doc

c, i:

h_i: i F.W


ms, Resolve F Doc.nl c i ms
α: Type

F: Factory α

d: Doc

c, i:

h_i: i F.W

m: Meas

h: MeasRender F Doc.nl c i m

h_c: c F.W


ms, Resolve F Doc.nl c i ms
α: Type

F: Factory α

d: Doc

c, i:

h_i: i F.W

m: Meas

h: MeasRender F Doc.nl c i m

h_c: c F.W


ms, Resolve F Doc.nl c i ms

Goals accomplished! 🐙
α: Type

F: Factory α

d: Doc

c, i:

h_i: i F.W

m: Meas

h: MeasRender F Doc.nl c i m

h_c: c F.W


[m] []

Goals accomplished! 🐙
α: Type

F: Factory α

d: Doc

c, i:

h_i: i F.W

m: Meas

h: MeasRender F Doc.nl c i m

h_c: c F.W


Resolve F Doc.nl c i (MeasureSet.set [m] (_ : ¬[m] = []))
α: Type

F: Factory α

d: Doc

c, i:

h_i: i F.W

m: Meas

h: MeasRender F Doc.nl c i m

h_c: c F.W


ms, Resolve F Doc.nl c i ms
α: Type

F: Factory α

d: Doc

c, i:

h_i: i F.W

m: Meas

h: MeasRender F Doc.nl c i m

h_c: c F.W


h_c
c F.W
α: Type

F: Factory α

d: Doc

c, i:

h_i: i F.W

m: Meas

h: MeasRender F Doc.nl c i m

h_c: c F.W


h_i
i F.W
α: Type

F: Factory α

d: Doc

c, i:

h_i: i F.W

m: Meas

h: MeasRender F Doc.nl c i m

h_c: c F.W


h
α: Type

F: Factory α

d: Doc

c, i:

h_i: i F.W

m: Meas

h: MeasRender F Doc.nl c i m

h_c: c F.W


Resolve F Doc.nl c i (MeasureSet.set [m] (_ : ¬[m] = []))
α: Type

F: Factory α

d: Doc

c, i:

h_i: i F.W

m: Meas

h: MeasRender F Doc.nl c i m

h_c: c F.W


h_c
c F.W
α: Type

F: Factory α

d: Doc

c, i:

h_i: i F.W

m: Meas

h: MeasRender F Doc.nl c i m

h_c: c F.W


h_i
i F.W
α: Type

F: Factory α

d: Doc

c, i:

h_i: i F.W

m: Meas

h: MeasRender F Doc.nl c i m

h_c: c F.W


h
α: Type

F: Factory α

d: Doc

c, i:

h_i: i F.W

m: Meas

h: MeasRender F Doc.nl c i m

h_c: c F.W


Resolve F Doc.nl c i (MeasureSet.set [m] (_ : ¬[m] = []))

Goals accomplished! 🐙
α: Type

F: Factory α

d: Doc

c, i:

h_i: i F.W


ms, Resolve F Doc.nl c i ms
α: Type

F: Factory α

d: Doc

c, i:

h_i: i F.W

m: Meas

h: MeasRender F Doc.nl c i m

h_c: ¬c F.W


ms, Resolve F Doc.nl c i ms
α: Type

F: Factory α

d: Doc

c, i:

h_i: i F.W

m: Meas

h: MeasRender F Doc.nl c i m

h_c: c > F.W


ms, Resolve F Doc.nl c i ms
α: Type

F: Factory α

d: Doc

c, i:

h_i: i F.W

m: Meas

h: MeasRender F Doc.nl c i m

h_c: ¬c F.W


ms, Resolve F Doc.nl c i ms
α: Type

F: Factory α

d: Doc

c, i:

h_i: i F.W

m: Meas

h: MeasRender F Doc.nl c i m

h_c: c > F.W


α: Type

F: Factory α

d: Doc

c, i:

h_i: i F.W

m: Meas

h: MeasRender F Doc.nl c i m

h_c: ¬c F.W


ms, Resolve F Doc.nl c i ms
α: Type

F: Factory α

d: Doc

c, i:

h_i: i F.W

m: Meas

h: MeasRender F Doc.nl c i m

h_c: c > F.W


h_bad
c > F.W i > F.W
α: Type

F: Factory α

d: Doc

c, i:

h_i: i F.W

m: Meas

h: MeasRender F Doc.nl c i m

h_c: c > F.W


h
α: Type

F: Factory α

d: Doc

c, i:

h_i: i F.W

m: Meas

h: MeasRender F Doc.nl c i m

h_c: c > F.W


α: Type

F: Factory α

d: Doc

c, i:

h_i: i F.W

m: Meas

h: MeasRender F Doc.nl c i m

h_c: c > F.W


h_bad
c > F.W i > F.W
α: Type

F: Factory α

d: Doc

c, i:

h_i: i F.W

m: Meas

h: MeasRender F Doc.nl c i m

h_c: c > F.W


h
α: Type

F: Factory α

d: Doc

c, i:

h_i: i F.W

m: Meas

h: MeasRender F Doc.nl c i m

h_c: c > F.W



Goals accomplished! 🐙
α: Type

F: Factory α

d: Doc

c, i:


ms, Resolve F Doc.nl c i ms
α: Type

F: Factory α

d: Doc

c, i:

h_i: ¬i F.W


ms, Resolve F Doc.nl c i ms
α: Type

F: Factory α

d: Doc

c, i:

h_i: i > F.W


ms, Resolve F Doc.nl c i ms
α: Type

F: Factory α

d: Doc

c, i:

h_i: ¬i F.W


ms, Resolve F Doc.nl c i ms
α: Type

F: Factory α

d: Doc

c, i:

h_i: i > F.W


ms, Resolve F Doc.nl c i ms

Goals accomplished! 🐙
α: Type

F: Factory α

d: Doc

c, i:

h_i: i > F.W



Goals accomplished! 🐙
α: Type

F: Factory α

d: Doc

c, i:

h_i: i > F.W

m: Meas

h: MeasRender F Doc.nl c i m


ms, Resolve F Doc.nl c i ms
α: Type

F: Factory α

d: Doc

c, i:

h_i: ¬i F.W


ms, Resolve F Doc.nl c i ms
α: Type

F: Factory α

d: Doc

c, i:

h_i: i > F.W

m: Meas

h: MeasRender F Doc.nl c i m


α: Type

F: Factory α

d: Doc

c, i:

h_i: ¬i F.W


ms, Resolve F Doc.nl c i ms
α: Type

F: Factory α

d: Doc

c, i:

h_i: i > F.W

m: Meas

h: MeasRender F Doc.nl c i m


h_bad
c > F.W i > F.W
α: Type

F: Factory α

d: Doc

c, i:

h_i: i > F.W

m: Meas

h: MeasRender F Doc.nl c i m


h
α: Type

F: Factory α

d: Doc

c, i:

h_i: i > F.W

m: Meas

h: MeasRender F Doc.nl c i m


α: Type

F: Factory α

d: Doc

c, i:

h_i: i > F.W

m: Meas

h: MeasRender F Doc.nl c i m


h_bad
c > F.W i > F.W
α: Type

F: Factory α

d: Doc

c, i:

h_i: i > F.W

m: Meas

h: MeasRender F Doc.nl c i m


h
α: Type

F: Factory α

d: Doc

c, i:

h_i: i > F.W

m: Meas

h: MeasRender F Doc.nl c i m



Goals accomplished! 🐙
α: Type

F: Factory α

d: Doc

c, i:


ms, Resolve F d c i ms
α: Type

F: Factory α

d✝: Doc

c, i, n:

d: Doc


ms, Resolve F (Doc.nest n d) c i ms
α: Type

F: Factory α

d: Doc

c, i:


ms, Resolve F d c i ms
α: Type

F: Factory α

d✝: Doc

c, i, n:

d: Doc

ms: MeasureSet

h: Resolve F d c (i + n) ms


ms, Resolve F (Doc.nest n d) c i ms
α: Type

F: Factory α

d✝: Doc

c, i, n:

d: Doc


ms, Resolve F (Doc.nest n d) c i ms
α: Type

F: Factory α

d✝: Doc

c, i, n:

d: Doc

ms: MeasureSet

h: Resolve F d c (i + n) ms


α: Type

F: Factory α

d✝: Doc

c, i, n:

d: Doc


ms, Resolve F (Doc.nest n d) c i ms
α: Type

F: Factory α

d✝: Doc

c, i, n:

d: Doc

ms: MeasureSet

h: Resolve F d c (i + n) ms


h
Resolve F d c (i + n) ms
α: Type

F: Factory α

d✝: Doc

c, i, n:

d: Doc


ms, Resolve F (Doc.nest n d) c i ms

Goals accomplished! 🐙
α: Type

F: Factory α

d: Doc

c, i:


ms, Resolve F d c i ms
α: Type

F: Factory α

d✝: Doc

c, i:

d: Doc


ms, Resolve F (Doc.align d) c i ms
α: Type

F: Factory α

d: Doc

c, i:


ms, Resolve F d c i ms
α: Type

F: Factory α

d✝: Doc

c, i:

d: Doc

ms: MeasureSet

h: Resolve F d c c ms


ms, Resolve F (Doc.align d) c i ms
α: Type

F: Factory α

d✝: Doc

c, i:

d: Doc


ms, Resolve F (Doc.align d) c i ms
α: Type

F: Factory α

d✝: Doc

c, i:

d: Doc

ms: MeasureSet

h: Resolve F d c c ms

h_i: i F.W


pos
ms, Resolve F (Doc.align d) c i ms
α: Type

F: Factory α

d✝: Doc

c, i:

d: Doc

ms: MeasureSet

h: Resolve F d c c ms

h_i: ¬i F.W


neg
ms, Resolve F (Doc.align d) c i ms
α: Type

F: Factory α

d✝: Doc

c, i:

d: Doc


ms, Resolve F (Doc.align d) c i ms
α: Type

F: Factory α

d✝: Doc

c, i:

d: Doc

ms: MeasureSet

h: Resolve F d c c ms

h_i: i F.W


ms, Resolve F (Doc.align d) c i ms
α: Type

F: Factory α

d✝: Doc

c, i:

d: Doc

ms: MeasureSet

h: Resolve F d c c ms

h_i: i F.W


α: Type

F: Factory α

d✝: Doc

c, i:

d: Doc

ms: MeasureSet

h: Resolve F d c c ms

h_i: i F.W


ms, Resolve F (Doc.align d) c i ms
α: Type

F: Factory α

d✝: Doc

c, i:

d: Doc

ms: MeasureSet

h: Resolve F d c c ms

h_i: i F.W


h_ok
i F.W
α: Type

F: Factory α

d✝: Doc

c, i:

d: Doc

ms: MeasureSet

h: Resolve F d c c ms

h_i: i F.W


h
Resolve F d c c ms
α: Type

F: Factory α

d✝: Doc

c, i:

d: Doc

ms: MeasureSet

h: Resolve F d c c ms

h_i: i F.W


α: Type

F: Factory α

d✝: Doc

c, i:

d: Doc

ms: MeasureSet

h: Resolve F d c c ms

h_i: i F.W


h_ok
i F.W
α: Type

F: Factory α

d✝: Doc

c, i:

d: Doc

ms: MeasureSet

h: Resolve F d c c ms

h_i: i F.W


h
Resolve F d c c ms
α: Type

F: Factory α

d✝: Doc

c, i:

d: Doc

ms: MeasureSet

h: Resolve F d c c ms

h_i: i F.W



Goals accomplished! 🐙
α: Type

F: Factory α

d✝: Doc

c, i:

d: Doc


ms, Resolve F (Doc.align d) c i ms
α: Type

F: Factory α

d✝: Doc

c, i:

d: Doc

ms: MeasureSet

h: Resolve F d c c ms

h_i: ¬i F.W


ms, Resolve F (Doc.align d) c i ms
α: Type

F: Factory α

d✝: Doc

c, i:

d: Doc

ms: MeasureSet

h: Resolve F d c c ms

h_i: i > F.W


ms, Resolve F (Doc.align d) c i ms
α: Type

F: Factory α

d✝: Doc

c, i:

d: Doc

ms: MeasureSet

h: Resolve F d c c ms

h_i: ¬i F.W


ms, Resolve F (Doc.align d) c i ms
α: Type

F: Factory α

d✝: Doc

c, i:

d: Doc

ms: MeasureSet

h: Resolve F d c c ms

h_i: i > F.W


α: Type

F: Factory α

d✝: Doc

c, i:

d: Doc

ms: MeasureSet

h: Resolve F d c c ms

h_i: ¬i F.W


ms, Resolve F (Doc.align d) c i ms
α: Type

F: Factory α

d✝: Doc

c, i:

d: Doc

ms: MeasureSet

h: Resolve F d c c ms

h_i: i > F.W


h_bad
i > F.W
α: Type

F: Factory α

d✝: Doc

c, i:

d: Doc

ms: MeasureSet

h: Resolve F d c c ms

h_i: i > F.W


h
Resolve F d c c ms
α: Type

F: Factory α

d✝: Doc

c, i:

d: Doc

ms: MeasureSet

h: Resolve F d c c ms

h_i: i > F.W


α: Type

F: Factory α

d✝: Doc

c, i:

d: Doc

ms: MeasureSet

h: Resolve F d c c ms

h_i: i > F.W


h_bad
i > F.W
α: Type

F: Factory α

d✝: Doc

c, i:

d: Doc

ms: MeasureSet

h: Resolve F d c c ms

h_i: i > F.W


h
Resolve F d c c ms
α: Type

F: Factory α

d✝: Doc

c, i:

d: Doc

ms: MeasureSet

h: Resolve F d c c ms

h_i: i > F.W



Goals accomplished! 🐙
α: Type

F: Factory α

d: Doc

c, i:


ms, Resolve F d c i ms
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc


ms, Resolve F (Doc.choice d₁ d₂) c i ms
α: Type

F: Factory α

d: Doc

c, i:


ms, Resolve F d c i ms
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc

ms₁: MeasureSet

h₁: Resolve F d₁ c i ms₁


ms, Resolve F (Doc.choice d₁ d₂) c i ms
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc


ms, Resolve F (Doc.choice d₁ d₂) c i ms
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc

ms₁: MeasureSet

h₁: Resolve F d₁ c i ms₁

ms₂: MeasureSet

h₂: Resolve F d₂ c i ms₂


ms, Resolve F (Doc.choice d₁ d₂) c i ms
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc


ms, Resolve F (Doc.choice d₁ d₂) c i ms
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc

ms₁: MeasureSet

h₁: Resolve F d₁ c i ms₁

ms₂: MeasureSet

h₂: Resolve F d₂ c i ms₂


Resolve F (Doc.choice d₁ d₂) c i (MeasureSet.union F ms₁ ms₂)
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc


ms, Resolve F (Doc.choice d₁ d₂) c i ms
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc

ms₁: MeasureSet

h₁: Resolve F d₁ c i ms₁

ms₂: MeasureSet

h₂: Resolve F d₂ c i ms₂


h_left
Resolve F d₁ c i ms₁
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc

ms₁: MeasureSet

h₁: Resolve F d₁ c i ms₁

ms₂: MeasureSet

h₂: Resolve F d₂ c i ms₂


h_right
Resolve F d₂ c i ms₂
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc

ms₁: MeasureSet

h₁: Resolve F d₁ c i ms₁

ms₂: MeasureSet

h₂: Resolve F d₂ c i ms₂


Resolve F (Doc.choice d₁ d₂) c i (MeasureSet.union F ms₁ ms₂)
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc

ms₁: MeasureSet

h₁: Resolve F d₁ c i ms₁

ms₂: MeasureSet

h₂: Resolve F d₂ c i ms₂


h_left
Resolve F d₁ c i ms₁
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc

ms₁: MeasureSet

h₁: Resolve F d₁ c i ms₁

ms₂: MeasureSet

h₂: Resolve F d₂ c i ms₂


h_right
Resolve F d₂ c i ms₂
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc

ms₁: MeasureSet

h₁: Resolve F d₁ c i ms₁

ms₂: MeasureSet

h₂: Resolve F d₂ c i ms₂


Resolve F (Doc.choice d₁ d₂) c i (MeasureSet.union F ms₁ ms₂)

Goals accomplished! 🐙
α: Type

F: Factory α

d: Doc

c, i:


ms, Resolve F d c i ms
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc


ms, Resolve F (Doc.concat d₁ d₂) c i ms
α: Type

F: Factory α

d: Doc

c, i:


ms, Resolve F d c i ms
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc

ms₁: MeasureSet

h₁: Resolve F d₁ c i ms₁


ms, Resolve F (Doc.concat d₁ d₂) c i ms
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc


ms, Resolve F (Doc.concat d₁ d₂) c i ms
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc

m✝: Meas

h₁: Resolve F d₁ c i (MeasureSet.tainted m✝)


tainted
ms, Resolve F (Doc.concat d₁ d₂) c i ms
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc

ms✝: List Meas

h✝: ms✝ []

h₁: Resolve F d₁ c i (MeasureSet.set ms✝ h✝)


set
ms, Resolve F (Doc.concat d₁ d₂) c i ms
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc


ms, Resolve F (Doc.concat d₁ d₂) c i ms
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc

m₁: Meas

h₁: Resolve F d₁ c i (MeasureSet.tainted m₁)


ms, Resolve F (Doc.concat d₁ d₂) c i ms
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc

m₁: Meas

h₁: Resolve F d₁ c i (MeasureSet.tainted m₁)

ms₂: MeasureSet

h₂: Resolve F d₂ m₁.last i ms₂


ms, Resolve F (Doc.concat d₁ d₂) c i ms
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc

m₁: Meas

h₁: Resolve F d₁ c i (MeasureSet.tainted m₁)


ms, Resolve F (Doc.concat d₁ d₂) c i ms
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc

m₁: Meas

h₁: Resolve F d₁ c i (MeasureSet.tainted m₁)

ms₂: MeasureSet

h₂: Resolve F d₂ m₁.last i ms₂


ms, Resolve F (Doc.concat d₁ d₂) c i ms

Goals accomplished! 🐙
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc

m₁: Meas

h₁: Resolve F d₁ c i (MeasureSet.tainted m₁)

ms₂: MeasureSet

h₂: Resolve F d₂ m₁.last i ms₂


α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc

m₁: Meas

h₁: Resolve F d₁ c i (MeasureSet.tainted m₁)

ms₂: MeasureSet

h₂: Resolve F d₂ m₁.last i ms₂


α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc

m₁: Meas

h₁: Resolve F d₁ c i (MeasureSet.tainted m₁)

ms₂: MeasureSet

h₂: Resolve F d₂ m₁.last i ms₂


α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc

m₁: Meas

h₁: Resolve F d₁ c i (MeasureSet.tainted m₁)

m✝: Meas

h₂: Resolve F d₂ m₁.last i (MeasureSet.tainted m✝)


tainted
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc

m₁: Meas

h₁: Resolve F d₁ c i (MeasureSet.tainted m₁)

ms✝: List Meas

h✝: ms✝ []

h₂: Resolve F d₂ m₁.last i (MeasureSet.set ms✝ h✝)


set
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc

m₁: Meas

h₁: Resolve F d₁ c i (MeasureSet.tainted m₁)

ms₂: MeasureSet

h₂: Resolve F d₂ m₁.last i ms₂


α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc

m₁: Meas

h₁: Resolve F d₁ c i (MeasureSet.tainted m₁)

m✝: Meas

h₂: Resolve F d₂ m₁.last i (MeasureSet.tainted m✝)


tainted
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc

m₁: Meas

h₁: Resolve F d₁ c i (MeasureSet.tainted m₁)

ms✝: List Meas

h✝: ms✝ []

h₂: Resolve F d₂ m₁.last i (MeasureSet.set ms✝ h✝)


set
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc

m₁: Meas

h₁: Resolve F d₁ c i (MeasureSet.tainted m₁)

m✝: Meas

h₂: Resolve F d₂ m₁.last i (MeasureSet.tainted m✝)


tainted
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc

m₁: Meas

h₁: Resolve F d₁ c i (MeasureSet.tainted m₁)

ms✝: List Meas

h✝: ms✝ []

h₂: Resolve F d₂ m₁.last i (MeasureSet.set ms✝ h✝)


set

Goals accomplished! 🐙

Goals accomplished! 🐙

Goals accomplished! 🐙
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc

m₁: Meas

h₁: Resolve F d₁ c i (MeasureSet.tainted m₁)


ms, Resolve F (Doc.concat d₁ d₂) c i ms
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc

m₁: Meas

h₁: Resolve F d₁ c i (MeasureSet.tainted m₁)

ms₂: MeasureSet

h₂: Resolve F d₂ m₁.last i ms₂

this: m₂, MeasureSet.taint ms₂ = MeasureSet.tainted m₂

m₂: Meas

h₂': MeasureSet.taint ms₂ = MeasureSet.tainted m₂


ms, Resolve F (Doc.concat d₁ d₂) c i ms
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc

m₁: Meas

h₁: Resolve F d₁ c i (MeasureSet.tainted m₁)


ms, Resolve F (Doc.concat d₁ d₂) c i ms
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc

m₁: Meas

h₁: Resolve F d₁ c i (MeasureSet.tainted m₁)

ms₂: MeasureSet

h₂: Resolve F d₂ m₁.last i ms₂

this: m₂, MeasureSet.taint ms₂ = MeasureSet.tainted m₂

m₂: Meas

h₂': MeasureSet.taint ms₂ = MeasureSet.tainted m₂


Resolve F (Doc.concat d₁ d₂) c i (MeasureSet.tainted (Meas.concat F m₁ m₂))
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc

m₁: Meas

h₁: Resolve F d₁ c i (MeasureSet.tainted m₁)


ms, Resolve F (Doc.concat d₁ d₂) c i ms
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc

m₁: Meas

h₁: Resolve F d₁ c i (MeasureSet.tainted m₁)

ms₂: MeasureSet

h₂: Resolve F d₂ m₁.last i ms₂

this: m₂, MeasureSet.taint ms₂ = MeasureSet.tainted m₂

m₂: Meas

h₂': MeasureSet.taint ms₂ = MeasureSet.tainted m₂


h_left
Resolve F d₁ c i (MeasureSet.tainted m₁)
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc

m₁: Meas

h₁: Resolve F d₁ c i (MeasureSet.tainted m₁)

ms₂: MeasureSet

h₂: Resolve F d₂ m₁.last i ms₂

this: m₂, MeasureSet.taint ms₂ = MeasureSet.tainted m₂

m₂: Meas

h₂': MeasureSet.taint ms₂ = MeasureSet.tainted m₂


h_right
Resolve F d₂ m₁.last i ?ms'
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc

m₁: Meas

h₁: Resolve F d₁ c i (MeasureSet.tainted m₁)

ms₂: MeasureSet

h₂: Resolve F d₂ m₁.last i ms₂

this: m₂, MeasureSet.taint ms₂ = MeasureSet.tainted m₂

m₂: Meas

h₂': MeasureSet.taint ms₂ = MeasureSet.tainted m₂


h_taint
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc

m₁: Meas

h₁: Resolve F d₁ c i (MeasureSet.tainted m₁)

ms₂: MeasureSet

h₂: Resolve F d₂ m₁.last i ms₂

this: m₂, MeasureSet.taint ms₂ = MeasureSet.tainted m₂

m₂: Meas

h₂': MeasureSet.taint ms₂ = MeasureSet.tainted m₂


ms'
MeasureSet
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc

m₁: Meas

h₁: Resolve F d₁ c i (MeasureSet.tainted m₁)

ms₂: MeasureSet

h₂: Resolve F d₂ m₁.last i ms₂

this: m₂, MeasureSet.taint ms₂ = MeasureSet.tainted m₂

m₂: Meas

h₂': MeasureSet.taint ms₂ = MeasureSet.tainted m₂


Resolve F (Doc.concat d₁ d₂) c i (MeasureSet.tainted (Meas.concat F m₁ m₂))
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc

m₁: Meas

h₁: Resolve F d₁ c i (MeasureSet.tainted m₁)

ms₂: MeasureSet

h₂: Resolve F d₂ m₁.last i ms₂

this: m₂, MeasureSet.taint ms₂ = MeasureSet.tainted m₂

m₂: Meas

h₂': MeasureSet.taint ms₂ = MeasureSet.tainted m₂


h_left
Resolve F d₁ c i (MeasureSet.tainted m₁)
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc

m₁: Meas

h₁: Resolve F d₁ c i (MeasureSet.tainted m₁)

ms₂: MeasureSet

h₂: Resolve F d₂ m₁.last i ms₂

this: m₂, MeasureSet.taint ms₂ = MeasureSet.tainted m₂

m₂: Meas

h₂': MeasureSet.taint ms₂ = MeasureSet.tainted m₂


h_right
Resolve F d₂ m₁.last i ?ms'
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc

m₁: Meas

h₁: Resolve F d₁ c i (MeasureSet.tainted m₁)

ms₂: MeasureSet

h₂: Resolve F d₂ m₁.last i ms₂

this: m₂, MeasureSet.taint ms₂ = MeasureSet.tainted m₂

m₂: Meas

h₂': MeasureSet.taint ms₂ = MeasureSet.tainted m₂


h_taint
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc

m₁: Meas

h₁: Resolve F d₁ c i (MeasureSet.tainted m₁)

ms₂: MeasureSet

h₂: Resolve F d₂ m₁.last i ms₂

this: m₂, MeasureSet.taint ms₂ = MeasureSet.tainted m₂

m₂: Meas

h₂': MeasureSet.taint ms₂ = MeasureSet.tainted m₂


ms'
MeasureSet
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc

m₁: Meas

h₁: Resolve F d₁ c i (MeasureSet.tainted m₁)

ms₂: MeasureSet

h₂: Resolve F d₂ m₁.last i ms₂

this: m₂, MeasureSet.taint ms₂ = MeasureSet.tainted m₂

m₂: Meas

h₂': MeasureSet.taint ms₂ = MeasureSet.tainted m₂


Resolve F (Doc.concat d₁ d₂) c i (MeasureSet.tainted (Meas.concat F m₁ m₂))

Goals accomplished! 🐙
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc


ms, Resolve F (Doc.concat d₁ d₂) c i ms
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc

ms: List Meas

h_non_empty: ms []

h₁: Resolve F d₁ c i (MeasureSet.set ms h_non_empty)


ms, Resolve F (Doc.concat d₁ d₂) c i ms
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc

ms: List Meas

h_non_empty: ms []

h₁: Resolve F d₁ c i (MeasureSet.set ms h_non_empty)

msr: MeasureSet

h': ResolveConcat F ms d₂ i msr


ms, Resolve F (Doc.concat d₁ d₂) c i ms
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc

ms: List Meas

h_non_empty: ms []

h₁: Resolve F d₁ c i (MeasureSet.set ms h_non_empty)


ms, Resolve F (Doc.concat d₁ d₂) c i ms
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc

ms: List Meas

h_non_empty: ms []

h₁: Resolve F d₁ c i (MeasureSet.set ms h_non_empty)

msr: MeasureSet

h': ResolveConcat F ms d₂ i msr


Resolve F (Doc.concat d₁ d₂) c i msr
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc

ms: List Meas

h_non_empty: ms []

h₁: Resolve F d₁ c i (MeasureSet.set ms h_non_empty)


ms, Resolve F (Doc.concat d₁ d₂) c i ms
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc

ms: List Meas

h_non_empty: ms []

h₁: Resolve F d₁ c i (MeasureSet.set ms h_non_empty)

msr: MeasureSet

h': ResolveConcat F ms d₂ i msr


h_left
Resolve F d₁ c i (MeasureSet.set ?ms ?h_non_empty)
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc

ms: List Meas

h_non_empty: ms []

h₁: Resolve F d₁ c i (MeasureSet.set ms h_non_empty)

msr: MeasureSet

h': ResolveConcat F ms d₂ i msr


h
ResolveConcat F ?ms d₂ i msr
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc

ms: List Meas

h_non_empty: ms []

h₁: Resolve F d₁ c i (MeasureSet.set ms h_non_empty)

msr: MeasureSet

h': ResolveConcat F ms d₂ i msr


ms
List Meas
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc

ms: List Meas

h_non_empty: ms []

h₁: Resolve F d₁ c i (MeasureSet.set ms h_non_empty)

msr: MeasureSet

h': ResolveConcat F ms d₂ i msr


h_non_empty
?ms []
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc

ms: List Meas

h_non_empty: ms []

h₁: Resolve F d₁ c i (MeasureSet.set ms h_non_empty)

msr: MeasureSet

h': ResolveConcat F ms d₂ i msr


Resolve F (Doc.concat d₁ d₂) c i msr
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc

ms: List Meas

h_non_empty: ms []

h₁: Resolve F d₁ c i (MeasureSet.set ms h_non_empty)

msr: MeasureSet

h': ResolveConcat F ms d₂ i msr


h_left
Resolve F d₁ c i (MeasureSet.set ?ms ?h_non_empty)
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc

ms: List Meas

h_non_empty: ms []

h₁: Resolve F d₁ c i (MeasureSet.set ms h_non_empty)

msr: MeasureSet

h': ResolveConcat F ms d₂ i msr


h
ResolveConcat F ?ms d₂ i msr
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc

ms: List Meas

h_non_empty: ms []

h₁: Resolve F d₁ c i (MeasureSet.set ms h_non_empty)

msr: MeasureSet

h': ResolveConcat F ms d₂ i msr


ms
List Meas
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc

ms: List Meas

h_non_empty: ms []

h₁: Resolve F d₁ c i (MeasureSet.set ms h_non_empty)

msr: MeasureSet

h': ResolveConcat F ms d₂ i msr


h_non_empty
?ms []
α: Type

F: Factory α

d: Doc

c, i:

d₁, d₂: Doc

ms: List Meas

h_non_empty: ms []

h₁: Resolve F d₁ c i (MeasureSet.set ms h_non_empty)

msr: MeasureSet

h': ResolveConcat F ms d₂ i msr


Resolve F (Doc.concat d₁ d₂) c i msr

Goals accomplished! 🐙
theorem
ResolveConcatOne_total: ∀ {α : Type} (F : Factory α) (d : Doc) (m : Meas) (i : ), msr, ResolveConcatOne F d m i msr
ResolveConcatOne_total
(
F: Factory α
F
:
Factory: TypeType
Factory
α: ?m.26
α
) (
d: Doc
d
:
Doc: Type
Doc
) (
m: Meas
m
:
Meas: {α : Type} → Type
Meas
) (
i:
i
:
: Type
) : ∃
msr: ?m.41
msr
,
ResolveConcatOne: {α : Type} → Factory αDocMeasMeasureSetProp
ResolveConcatOne
F: Factory α
F
d: Doc
d
m: Meas
m
i:
i
msr: ?m.41
msr
:=

Goals accomplished! 🐙
α: Type

F: Factory α

d: Doc

m: Meas

i:


msr, ResolveConcatOne F d m i msr
α: Type

F: Factory α

d: Doc

m: Meas

i:

ms: MeasureSet

h: Resolve F d m.last i ms


msr, ResolveConcatOne F d m i msr
α: Type

F: Factory α

d: Doc

m: Meas

i:


msr, ResolveConcatOne F d m i msr
α: Type

F: Factory α

d: Doc

m: Meas

i:

m✝: Meas

h: Resolve F d m.last i (MeasureSet.tainted m✝)


tainted
msr, ResolveConcatOne F d m i msr
α: Type

F: Factory α

d: Doc

m: Meas

i:

ms✝: List Meas

h✝: ms✝ []

h: Resolve F d m.last i (MeasureSet.set ms✝ h✝)


set
msr, ResolveConcatOne F d m i msr
α: Type

F: Factory α

d: Doc

m: Meas

i:


msr, ResolveConcatOne F d m i msr
α: Type

F: Factory α

d: Doc

m: Meas

i:

ms: List Meas

h': ms []

h: Resolve F d m.last i (MeasureSet.set ms h')


msr, ResolveConcatOne F d m i msr
α: Type

F: Factory α

d: Doc

m: Meas

i:

ms: List Meas

h': ms []

h: Resolve F d m.last i (MeasureSet.set ms h')


msr, ResolveConcatOne F d m i msr

Goals accomplished! 🐙
α: Type

F: Factory α

d: Doc

m: Meas

i:

ms: List Meas

h': ms []

h: Resolve F d m.last i (MeasureSet.set ms h')


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

F: Factory α

d: Doc

m: Meas

i:

ms: List Meas

h': ms []

h: Resolve F d m.last i (MeasureSet.set ms h')


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

F: Factory α

d: Doc

m: Meas

i:

ms: List Meas

h': ms []

h: Resolve F d m.last i (MeasureSet.set ms h')


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

F: Factory α

d: Doc

m: Meas

i:

ms: List Meas

h': ms []

h: Resolve F d m.last i (MeasureSet.set ms h')


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

F: Factory α

d: Doc

m: Meas

i:

ms: List Meas

h': ms []

h: Resolve F d m.last i (MeasureSet.set ms h')


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

Goals accomplished! 🐙

Goals accomplished! 🐙
α: Type

F: Factory α

d: Doc

m: Meas

i:

ms: List Meas

h': ms []

h: Resolve F d m.last i (MeasureSet.set ms h')


ResolveConcatOne F d m i (MeasureSet.set (dedup F (List.map (fun m' => Meas.concat F m m') ms)) (_ : dedup F (List.map (fun m' => Meas.concat F m m') ms) []))
α: Type

F: Factory α

d: Doc

m: Meas

i:

ms: List Meas

h': ms []

h: Resolve F d m.last i (MeasureSet.set ms h')


msr, ResolveConcatOne F d m i msr
α: Type

F: Factory α

d: Doc

m: Meas

i:

ms: List Meas

h': ms []

h: Resolve F d m.last i (MeasureSet.set ms h')


h
Resolve F d m.last i (MeasureSet.set ms ?h_non_empty)
α: Type

F: Factory α

d: Doc

m: Meas

i:

ms: List Meas

h': ms []

h: Resolve F d m.last i (MeasureSet.set ms h')


h_non_empty
ms []
α: Type

F: Factory α

d: Doc

m: Meas

i:

ms: List Meas

h': ms []

h: Resolve F d m.last i (MeasureSet.set ms h')


ResolveConcatOne F d m i (MeasureSet.set (dedup F (List.map (fun m' => Meas.concat F m m') ms)) (_ : dedup F (List.map (fun m' => Meas.concat F m m') ms) []))
α: Type

F: Factory α

d: Doc

m: Meas

i:

ms: List Meas

h': ms []

h: Resolve F d m.last i (MeasureSet.set ms h')


h
Resolve F d m.last i (MeasureSet.set ms ?h_non_empty)
α: Type

F: Factory α

d: Doc

m: Meas

i:

ms: List Meas

h': ms []

h: Resolve F d m.last i (MeasureSet.set ms h')


h_non_empty
ms []
α: Type

F: Factory α

d: Doc

m: Meas

i:

ms: List Meas

h': ms []

h: Resolve F d m.last i (MeasureSet.set ms h')


ResolveConcatOne F d m i (MeasureSet.set (dedup F (List.map (fun m' => Meas.concat F m m') ms)) (_ : dedup F (List.map (fun m' => Meas.concat F m m') ms) []))

Goals accomplished! 🐙
α: Type

F: Factory α

d: Doc

m: Meas

i:


msr, ResolveConcatOne F d m i msr
α: Type

F: Factory α

d: Doc

m: Meas

i:

m': Meas

h: Resolve F d m.last i (MeasureSet.tainted m')


msr, ResolveConcatOne F d m i msr
α: Type

F: Factory α

d: Doc

m: Meas

i:

m': Meas

h: Resolve F d m.last i (MeasureSet.tainted m')


α: Type

F: Factory α

d: Doc

m: Meas

i:

m': Meas

h: Resolve F d m.last i (MeasureSet.tainted m')


msr, ResolveConcatOne F d m i msr
α: Type

F: Factory α

d: Doc

m: Meas

i:

m': Meas

h: Resolve F d m.last i (MeasureSet.tainted m')


h
Resolve F d m.last i (MeasureSet.tainted m')
α: Type

F: Factory α

d: Doc

m: Meas

i:

m': Meas

h: Resolve F d m.last i (MeasureSet.tainted m')


msr, ResolveConcatOne F d m i msr

Goals accomplished! 🐙
theorem
ResolveConcat_total: ∀ {α : Type} (F : Factory α) (ms : List Meas) (d : Doc) (i : ), ms []msr, ResolveConcat F ms d i msr
ResolveConcat_total
(
F: Factory α
F
:
Factory: TypeType
Factory
α: ?m.51
α
) (
ms: List Meas
ms
:
List: Type ?u.56 → Type ?u.56
List
Meas: {α : Type} → Type
Meas
) (
d: Doc
d
:
Doc: Type
Doc
) (
i:
i
:
: Type
) (
h_non_empty: ms []
h_non_empty
:
ms: List Meas
ms
[]: List ?m.68
[]
) : ∃
msr: ?m.74
msr
,
ResolveConcat: {α : Type} → Factory αList MeasDocMeasureSetProp
ResolveConcat
F: Factory α
F
ms: List Meas
ms
d: Doc
d
i:
i
msr: ?m.74
msr
:=

Goals accomplished! 🐙
α: Type

F: Factory α

ms: List Meas

d: Doc

i:

h_non_empty: ms []


msr, ResolveConcat F ms d i msr
α: Type

F: Factory α

ms: List Meas

d: Doc

i:

h_non_empty: ms []


msr, ResolveConcat F ms d i msr
α: Type

F: Factory α

ms: List Meas

d: Doc

i:

h_non_empty: [] []


msr, ResolveConcat F [] d i msr
α: Type

F: Factory α

ms: List Meas

d: Doc

i:

h_non_empty: ms []


msr, ResolveConcat F ms d i msr

Goals accomplished! 🐙
α: Type

F: Factory α

ms: List Meas

d: Doc

i:

h_non_empty: ms []


msr, ResolveConcat F ms d i msr
α: Type

F: Factory α

ms: List Meas

d: Doc

i:

m: Meas

h_non_empty: [m] []


msr, ResolveConcat F [m] d i msr
α: Type

F: Factory α

ms: List Meas

d: Doc

i:

h_non_empty: ms []


msr, ResolveConcat F ms d i msr
α: Type

F: Factory α

ms: List Meas

d: Doc

i:

m: Meas

h_non_empty: [m] []

msr: MeasureSet

h: ResolveConcatOne F d m i msr


msr, ResolveConcat F [m] d i msr
α: Type

F: Factory α

ms: List Meas

d: Doc

i:

m: Meas

h_non_empty: [m] []


msr, ResolveConcat F [m] d i msr
α: Type

F: Factory α

ms: List Meas

d: Doc

i:

m: Meas

h_non_empty: [m] []

msr: MeasureSet

h: ResolveConcatOne F d m i msr


ResolveConcat F [m] d i msr
α: Type

F: Factory α

ms: List Meas

d: Doc

i:

m: Meas

h_non_empty: [m] []


msr, ResolveConcat F [m] d i msr
α: Type

F: Factory α

ms: List Meas

d: Doc

i:

m: Meas

h_non_empty: [m] []

msr: MeasureSet

h: ResolveConcatOne F d m i msr


h_current
ResolveConcatOne F d m i msr
α: Type

F: Factory α

ms: List Meas

d: Doc

i:

m: Meas

h_non_empty: [m] []


msr, ResolveConcat F [m] d i msr

Goals accomplished! 🐙
α: Type

F: Factory α

ms: List Meas

d: Doc

i:

h_non_empty: ms []


msr, ResolveConcat F ms d i msr
α: Type

F: Factory α

ms: List Meas

d: Doc

i:

m, hd: Meas

tl: List Meas

h_non_empty: m :: hd :: tl []


msr, ResolveConcat F (m :: hd :: tl) d i msr
α: Type

F: Factory α

ms: List Meas

d: Doc

i:

h_non_empty: ms []


msr, ResolveConcat F ms d i msr
α: Type

F: Factory α

ms: List Meas

d: Doc

i:

m, hd: Meas

tl: List Meas

h_non_empty: m :: hd :: tl []


msr, ResolveConcat F (m :: hd :: tl) d i msr

Goals accomplished! 🐙
α: Type

F: Factory α

ms: List Meas

d: Doc

i:

m, hd: Meas

tl: List Meas

h_non_empty: m :: hd :: tl []


hd :: tl []

Goals accomplished! 🐙
α: Type

F: Factory α

ms: List Meas

d: Doc

i:

m, hd: Meas

tl: List Meas

h_non_empty: m :: hd :: tl []

msr: MeasureSet

h: ResolveConcat F (hd :: tl) d i msr


msr, ResolveConcat F (m :: hd :: tl) d i msr
α: Type

F: Factory α

ms: List Meas

d: Doc

i:

m, hd: Meas

tl: List Meas

h_non_empty: m :: hd :: tl []


msr, ResolveConcat F (m :: hd :: tl) d i msr
α: Type

F: Factory α

ms: List Meas

d: Doc

i:

m, hd: Meas

tl: List Meas

h_non_empty: m :: hd :: tl []

msr: MeasureSet

h: ResolveConcat F (hd :: tl) d i msr

msr': MeasureSet

h': ResolveConcatOne F d m i msr'


msr, ResolveConcat F (m :: hd :: tl) d i msr
α: Type

F: Factory α

ms: List Meas

d: Doc

i:

m, hd: Meas

tl: List Meas

h_non_empty: m :: hd :: tl []


msr, ResolveConcat F (m :: hd :: tl) d i msr
α: Type

F: Factory α

ms: List Meas

d: Doc

i:

m, hd: Meas

tl: List Meas

h_non_empty: m :: hd :: tl []

msr: MeasureSet

h: ResolveConcat F (hd :: tl) d i msr

msr': MeasureSet

h': ResolveConcatOne F d m i msr'


ResolveConcat F (m :: hd :: tl) d i (MeasureSet.union F msr' msr)
α: Type

F: Factory α

ms: List Meas

d: Doc

i:

m, hd: Meas

tl: List Meas

h_non_empty: m :: hd :: tl []


msr, ResolveConcat F (m :: hd :: tl) d i msr
α: Type

F: Factory α

ms: List Meas

d: Doc

i:

m, hd: Meas

tl: List Meas

h_non_empty: m :: hd :: tl []

msr: MeasureSet

h: ResolveConcat F (hd :: tl) d i msr

msr': MeasureSet

h': ResolveConcatOne F d m i msr'


ResolveConcat F (m :: hd :: tl) d i (MeasureSet.union F msr' msr)
α: Type

F: Factory α

ms: List Meas

d: Doc

i:

m, hd: Meas

tl: List Meas

h_non_empty: m :: hd :: tl []

msr: MeasureSet

h: ResolveConcat F (hd :: tl) d i msr

msr': MeasureSet

h': ResolveConcatOne F d m i msr'


h_rest
ResolveConcat F (hd :: tl) d i msr
α: Type

F: Factory α

ms: List Meas

d: Doc

i:

m, hd: Meas

tl: List Meas

h_non_empty: m :: hd :: tl []

msr: MeasureSet

h: ResolveConcat F (hd :: tl) d i msr

msr': MeasureSet

h': ResolveConcatOne F d m i msr'


h_current
ResolveConcatOne F d m i msr'

Goals accomplished! 🐙
end termination_by ResolveConcatOne_total => (
d: Doc
d
.
size: Doc
size
,
1: ?m.32290
1
,
0: ?m.32297
0
) ResolveConcat_total => (
d: Doc
d
.
size: Doc
size
,
2: ?m.32224
2
,
ms: List Meas
ms
.
length: {α : Type ?u.32233} → List α
length
) Resolve_total => (
d: Doc
d
.
size: Doc
size
,
0: ?m.32090
0
,
0: ?m.32101
0
)