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 (F : FactoryF: Factory αα) (α: ?m.3d :d: DocDoc) (Doc: Typecc: ℕi :i: ℕℕ) : ∃ℕ: Typems, Resolvems: ?m.17FF: Factory αdd: Doccc: ℕii: ℕms :=ms: ?m.17Goals accomplished! 🐙Goals accomplished! 🐙Goals accomplished! 🐙Goals accomplished! 🐙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
h_cc + String.length s ≤ 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_ii ≤ 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
hMeasRender 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
h_cc + String.length s ≤ 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_ii ≤ 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
hMeasRender F (Doc.text s) c i mGoals accomplished! 🐙Goals accomplished! 🐙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 mResolve F (Doc.text s) c i (MeasureSet.tainted 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_badc + 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
hMeasRender F (Doc.text s) c i mGoals 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 mMeasRender F (Doc.text s) c i mGoals accomplished! 🐙Goals accomplished! 🐙Goals accomplished! 🐙Goals accomplished! 🐙MeasRender F (Doc.text s) c i mGoals accomplished! 🐙Goals accomplished! 🐙Goals accomplished! 🐙Goals accomplished! 🐙Goals accomplished! 🐙Goals accomplished! 🐙Goals accomplished! 🐙Goals accomplished! 🐙Goals accomplished! 🐙Resolve F Doc.nl c i (MeasureSet.tainted m)Resolve F Doc.nl c i (MeasureSet.tainted m)Resolve F Doc.nl c i (MeasureSet.tainted m)Goals accomplished! 🐙Goals accomplished! 🐙Goals accomplished! 🐙Resolve F (Doc.align d) c i (MeasureSet.lift (Meas.adjust_align i) (MeasureSet.taint ms))Resolve F (Doc.align d) c i (MeasureSet.lift (Meas.adjust_align i) (MeasureSet.taint ms))Resolve F (Doc.align d) c i (MeasureSet.lift (Meas.adjust_align i) (MeasureSet.taint ms))Goals accomplished! 🐙α: 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₂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₂Resolve F (Doc.choice d₁ d₂) c i (MeasureSet.union F ms₁ ms₂)Goals accomplished! 🐙
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∃ 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∃ 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 msGoals 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₂∃ m₂, MeasureSet.taint ms₂ = 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₂∃ m₂, MeasureSet.taint ms₂ = 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₂∃ m₂, MeasureSet.taint ms₂ = MeasureSet.tainted m₂α: 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∃ m₂, MeasureSet.taint (MeasureSet.tainted m✝) = 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✝: List Meas
h✝: ms✝ ≠ []
h₂: Resolve F d₂ m₁.last i (MeasureSet.set ms✝ h✝)
set∃ m₂, MeasureSet.taint (MeasureSet.set ms✝ h✝) = 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₂∃ m₂, MeasureSet.taint ms₂ = MeasureSet.tainted m₂α: 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∃ m₂, MeasureSet.taint (MeasureSet.tainted m✝) = 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✝: List Meas
h✝: ms✝ ≠ []
h₂: Resolve F d₂ m₁.last i (MeasureSet.set ms✝ h✝)
set∃ m₂, MeasureSet.taint (MeasureSet.set ms✝ h✝) = MeasureSet.tainted m₂α: 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∃ m₂, MeasureSet.taint (MeasureSet.tainted m✝) = 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✝: List Meas
h✝: ms✝ ≠ []
h₂: Resolve F d₂ m₁.last i (MeasureSet.set ms✝ h✝)
set∃ m₂, MeasureSet.taint (MeasureSet.set ms✝ h✝) = MeasureSet.tainted m₂Goals accomplished! 🐙Goals accomplished! 🐙Goals accomplished! 🐙∃ 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∃ 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₂))∃ 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_leftResolve 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_rightResolve 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_taintMeasureSet.taint ?ms' = 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₂
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_leftResolve 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_rightResolve 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_taintMeasureSet.taint ?ms' = 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₂
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: 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)
msr: MeasureSet
h': ResolveConcat F ms d₂ i msrResolve 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_leftResolve 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
hResolveConcat 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
msList 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 msrResolve 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_leftResolve 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
hResolveConcat 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
msList 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 msrResolve F (Doc.concat d₁ d₂) c i msrtheoremGoals accomplished! 🐙ResolveConcatOne_total (ResolveConcatOne_total: ∀ {α : Type} (F : Factory α) (d : Doc) (m : Meas) (i : ℕ), ∃ msr, ResolveConcatOne F d m i msrF : FactoryF: Factory αα) (α: ?m.26d :d: DocDoc) (Doc: Typem : Meas) (m: Measi :i: ℕℕ) : ∃ℕ: Typemsr, ResolveConcatOnemsr: ?m.41FF: Factory αdd: Docmm: Measii: ℕmsr :=msr: ?m.41Goals accomplished! 🐙∃ msr, ResolveConcatOne F d m i msr∃ msr, ResolveConcatOne F d m i msr
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∃ 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 msrGoals accomplished! 🐙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')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')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! 🐙∃ msr, ResolveConcatOne F d m i msr∃ msr, ResolveConcatOne F d m i msrResolveConcatOne F d m i (MeasureSet.tainted (Meas.concat F m m'))∃ msr, ResolveConcatOne F d m i msr
hResolve F d m.last i (MeasureSet.tainted m')∃ msr, ResolveConcatOne F d m i msrtheoremGoals accomplished! 🐙ResolveConcat_total (F : FactoryF: Factory αα) (α: ?m.51ms : List Meas) (ms: List Measd :d: DocDoc) (Doc: Typei :i: ℕℕ) (ℕ: Typeh_non_empty :h_non_empty: ms ≠ []ms ≠ms: List Meas[]) : ∃[]: List ?m.68msr, ResolveConcatmsr: ?m.74FF: Factory αmsms: List Measdd: Docii: ℕmsr :=msr: ?m.74Goals accomplished! 🐙Goals accomplished! 🐙α: 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: MeasureSet
h: ResolveConcatOne F d m i msrResolveConcat 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_currentResolveConcatOne F d m i msrGoals accomplished! 🐙Goals accomplished! 🐙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': 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: 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'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_restResolveConcat 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_currentResolveConcatOne F d m i msr'end termination_by ResolveConcatOne_total => (Goals accomplished! 🐙d.size,d: Doc1,1: ?m.322900) ResolveConcat_total => (0: ?m.32297d.size,d: Doc2,2: ?m.32224ms.length) Resolve_total => (ms: List Measd.size,d: Doc0,0: ?m.320900)0: ?m.32101