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 Mt.Thread.Traced
import Mt.System.Basic
import Mt.Utils.List

namespace Mt.System.Traced

open Utils

variable {
spec: Spec
spec
:
Spec: Type 1
Spec
} local
instance: {spec : Spec} → IsReservation spec.Reservation
instance
:
IsReservation: Type → Type
IsReservation
spec: Spec
spec
.
Reservation: Spec → Type
Reservation
:=
spec: Spec
spec
.
is_reservation: (self : Spec) → IsReservation self.Reservation
is_reservation
def
sum_reservations: {spec : Spec} → List (Traced.TracedThread spec) → spec.Reservation
sum_reservations
(l :
List: Type ?u.28 → Type ?u.28
List
(
Traced.TracedThread: Spec → Type 1
Traced.TracedThread
spec: Spec
spec
)) :
spec: Spec
spec
.
Reservation: Spec → Type
Reservation
:= l.
foldl: {α : Type ?u.35} → {β : Type ?u.34} → (α → β → α) → α → List β → α
foldl
(Ī»
env_r: ?m.44
env_r
thread: ?m.47
thread
=>
env_r: ?m.44
env_r
+
thread: ?m.47
thread
.
reservation: {spec : Spec} → Traced.TracedThread spec → spec.Reservation
reservation
)
spec: Spec
spec
.
is_reservation: (self : Spec) → IsReservation self.Reservation
is_reservation
.
empty: {T : Type} → [self : IsReservation T] → T
empty
private def
sum_reservations': {spec : Spec} → spec.Reservation → List (Traced.TracedThread spec) → spec.Reservation
sum_reservations'
(
start: ?m.219
start
) (l :
List: Type ?u.222 → Type ?u.222
List
(
Traced.TracedThread: Spec → Type 1
Traced.TracedThread
spec: Spec
spec
)) := l.
foldl: {α : Type ?u.231} → {β : Type ?u.230} → (α → β → α) → α → List β → α
foldl
(Ī»
env_r: ?m.240
env_r
thread: ?m.243
thread
=>
env_r: ?m.240
env_r
+
thread: ?m.243
thread
.
reservation: {spec : Spec} → Traced.TracedThread spec → spec.Reservation
reservation
)
start: ?m.219
start
protected theorem
sum_reservations.helper: āˆ€ {spec : Spec} (head : Traced.TracedThread spec) (l : List (Traced.TracedThread spec)), sum_reservations (head :: l) = head.reservation + sum_reservations l
sum_reservations.helper
(head :
Traced.TracedThread: Spec → Type 1
Traced.TracedThread
spec: Spec
spec
) (l) :
sum_reservations: {spec : Spec} → List (Traced.TracedThread spec) → spec.Reservation
sum_reservations
(head ::
l: ?m.415
l
) = head.
reservation: {spec : Spec} → Traced.TracedThread spec → spec.Reservation
reservation
+
sum_reservations: {spec : Spec} → List (Traced.TracedThread spec) → spec.Reservation
sum_reservations
l: ?m.415
l
:=

sum_reservations (head :: l) = head.reservation + sum_reservations l
spec: Spec

head: Traced.TracedThread spec

l: List (Traced.TracedThread spec)

this: āˆ€ (l : List (Traced.TracedThread spec)), sum_reservations l = Mt.System.Traced.sum_reservations' IsReservation.empty l


sum_reservations (head :: l) = head.reservation + sum_reservations l

sum_reservations (head :: l) = head.reservation + sum_reservations l
spec: Spec

head: Traced.TracedThread spec

l: List (Traced.TracedThread spec)

this: āˆ€ (l : List (Traced.TracedThread spec)), sum_reservations l = Mt.System.Traced.sum_reservations' IsReservation.empty l


Mt.System.Traced.sum_reservations' IsReservation.empty (head :: l) = head.reservation + Mt.System.Traced.sum_reservations' IsReservation.empty l

sum_reservations (head :: l) = head.reservation + sum_reservations l
spec: Spec

head: Traced.TracedThread spec

l: List (Traced.TracedThread spec)

this: āˆ€ (l : List (Traced.TracedThread spec)), sum_reservations l = Mt.System.Traced.sum_reservations' IsReservation.empty l


Mt.System.Traced.sum_reservations' IsReservation.empty (head :: l) = head.reservation + Mt.System.Traced.sum_reservations' IsReservation.empty l

sum_reservations (head :: l) = head.reservation + sum_reservations l

Mt.System.Traced.sum_reservations' IsReservation.empty (head :: l) = head.reservation + Mt.System.Traced.sum_reservations' IsReservation.empty l

sum_reservations (head :: l) = head.reservation + sum_reservations l

Mt.System.Traced.sum_reservations' head.reservation l = head.reservation + Mt.System.Traced.sum_reservations' IsReservation.empty l

sum_reservations (head :: l) = head.reservation + sum_reservations l

Mt.System.Traced.sum_reservations' head.reservation l = head.reservation + Mt.System.Traced.sum_reservations' IsReservation.empty l

head.reservation + Mt.System.Traced.sum_reservations' IsReservation.empty l = head.reservation + Mt.System.Traced.sum_reservations' IsReservation.empty l

Goals accomplished! šŸ™
where
add: āˆ€ (r : spec.Reservation) (head : Traced.TracedThread spec) (tail : List (Traced.TracedThread spec)), Mt.System.Traced.sum_reservations' r (head :: tail) = Mt.System.Traced.sum_reservations' (r + head.reservation) tail
add
(
r: spec.Reservation
r
) (head :
Traced.TracedThread: Spec → Type 1
Traced.TracedThread
spec: Spec
spec
) (tail) :
sum_reservations': {spec : Spec} → spec.Reservation → List (Traced.TracedThread spec) → spec.Reservation
sum_reservations'
r: ?m.474
r
(head::
tail: ?m.479
tail
) =
sum_reservations': {spec : Spec} → spec.Reservation → List (Traced.TracedThread spec) → spec.Reservation
sum_reservations'
(
r: ?m.474
r
+ head.
reservation: {spec : Spec} → Traced.TracedThread spec → spec.Reservation
reservation
)
tail: ?m.479
tail
:=
spec: Spec

headāœ: Traced.TracedThread spec

l: List (Traced.TracedThread spec)

r: spec.Reservation

head: Traced.TracedThread spec

tail: List (Traced.TracedThread spec)


Mt.System.Traced.sum_reservations' r (head :: tail) = Mt.System.Traced.sum_reservations' (r + head.reservation) tail

Goals accomplished! šŸ™
assoc: āˆ€ (r : spec.Reservation) (l : List (Traced.TracedThread spec)), Mt.System.Traced.sum_reservations' r l = r + Mt.System.Traced.sum_reservations' IsReservation.empty l
assoc
(
r: spec.Reservation
r
:
spec: Spec
spec
.
Reservation: Spec → Type
Reservation
) (l) :
sum_reservations': {spec : Spec} → spec.Reservation → List (Traced.TracedThread spec) → spec.Reservation
sum_reservations'
r: spec.Reservation
r
l: ?m.740
l
=
r: spec.Reservation
r
+
sum_reservations': {spec : Spec} → spec.Reservation → List (Traced.TracedThread spec) → spec.Reservation
sum_reservations'
IsReservation.empty: {T : Type} → [self : IsReservation T] → T
IsReservation.empty
l: ?m.740
l
:=
spec: Spec

head: Traced.TracedThread spec

lāœ: List (Traced.TracedThread spec)

r: spec.Reservation

l: List (Traced.TracedThread spec)


Mt.System.Traced.sum_reservations' r l = r + Mt.System.Traced.sum_reservations' IsReservation.empty l
spec: Spec

head: Traced.TracedThread spec

lāœ, l: List (Traced.TracedThread spec)


āˆ€ (r : spec.Reservation), Mt.System.Traced.sum_reservations' r l = r + Mt.System.Traced.sum_reservations' IsReservation.empty l
spec: Spec

head: Traced.TracedThread spec

lāœ: List (Traced.TracedThread spec)

r: spec.Reservation

l: List (Traced.TracedThread spec)


Mt.System.Traced.sum_reservations' r l = r + Mt.System.Traced.sum_reservations' IsReservation.empty l

nil
āˆ€ (r : spec.Reservation), Mt.System.Traced.sum_reservations' r [] = r + Mt.System.Traced.sum_reservations' IsReservation.empty []
spec: Spec

head: Traced.TracedThread spec

l: List (Traced.TracedThread spec)

headāœ: Traced.TracedThread spec

tailāœ: List (Traced.TracedThread spec)


cons
āˆ€ (r : spec.Reservation), Mt.System.Traced.sum_reservations' r (headāœ :: tailāœ) = r + Mt.System.Traced.sum_reservations' IsReservation.empty (headāœ :: tailāœ)
spec: Spec

head: Traced.TracedThread spec

lāœ: List (Traced.TracedThread spec)

r: spec.Reservation

l: List (Traced.TracedThread spec)


Mt.System.Traced.sum_reservations' r l = r + Mt.System.Traced.sum_reservations' IsReservation.empty l

nil
āˆ€ (r : spec.Reservation), Mt.System.Traced.sum_reservations' r [] = r + Mt.System.Traced.sum_reservations' IsReservation.empty []

nil
āˆ€ (r : spec.Reservation), Mt.System.Traced.sum_reservations' r [] = r + Mt.System.Traced.sum_reservations' IsReservation.empty []
spec: Spec

head: Traced.TracedThread spec

l: List (Traced.TracedThread spec)

headāœ: Traced.TracedThread spec

tailāœ: List (Traced.TracedThread spec)


cons
āˆ€ (r : spec.Reservation), Mt.System.Traced.sum_reservations' r (headāœ :: tailāœ) = r + Mt.System.Traced.sum_reservations' IsReservation.empty (headāœ :: tailāœ)
spec: Spec

head: Traced.TracedThread spec

l: List (Traced.TracedThread spec)

r: spec.Reservation


nil
Mt.System.Traced.sum_reservations' r [] = r + Mt.System.Traced.sum_reservations' IsReservation.empty []

nil
āˆ€ (r : spec.Reservation), Mt.System.Traced.sum_reservations' r [] = r + Mt.System.Traced.sum_reservations' IsReservation.empty []
spec: Spec

head: Traced.TracedThread spec

l: List (Traced.TracedThread spec)

headāœ: Traced.TracedThread spec

tailāœ: List (Traced.TracedThread spec)


cons
āˆ€ (r : spec.Reservation), Mt.System.Traced.sum_reservations' r (headāœ :: tailāœ) = r + Mt.System.Traced.sum_reservations' IsReservation.empty (headāœ :: tailāœ)
spec: Spec

head: Traced.TracedThread spec

l: List (Traced.TracedThread spec)

r: spec.Reservation


nil
r = r + IsReservation.empty

nil
āˆ€ (r : spec.Reservation), Mt.System.Traced.sum_reservations' r [] = r + Mt.System.Traced.sum_reservations' IsReservation.empty []
spec: Spec

head: Traced.TracedThread spec

l: List (Traced.TracedThread spec)

headāœ: Traced.TracedThread spec

tailāœ: List (Traced.TracedThread spec)


cons
āˆ€ (r : spec.Reservation), Mt.System.Traced.sum_reservations' r (headāœ :: tailāœ) = r + Mt.System.Traced.sum_reservations' IsReservation.empty (headāœ :: tailāœ)
spec: Spec

head: Traced.TracedThread spec

l: List (Traced.TracedThread spec)

r: spec.Reservation


nil
r = r + IsReservation.empty
spec: Spec

head: Traced.TracedThread spec

l: List (Traced.TracedThread spec)

r: spec.Reservation


nil
r = IsReservation.empty + r
spec: Spec

head: Traced.TracedThread spec

l: List (Traced.TracedThread spec)

r: spec.Reservation


nil
r = r + IsReservation.empty
spec: Spec

head: Traced.TracedThread spec

l: List (Traced.TracedThread spec)

r: spec.Reservation


nil
r = r

Goals accomplished! šŸ™
spec: Spec

head: Traced.TracedThread spec

lāœ: List (Traced.TracedThread spec)

r: spec.Reservation

l: List (Traced.TracedThread spec)


Mt.System.Traced.sum_reservations' r l = r + Mt.System.Traced.sum_reservations' IsReservation.empty l
spec: Spec

head: Traced.TracedThread spec

l: List (Traced.TracedThread spec)

headāœ: Traced.TracedThread spec

tailāœ: List (Traced.TracedThread spec)


cons
āˆ€ (r : spec.Reservation), Mt.System.Traced.sum_reservations' r (headāœ :: tailāœ) = r + Mt.System.Traced.sum_reservations' IsReservation.empty (headāœ :: tailāœ)
spec: Spec

head: Traced.TracedThread spec

l: List (Traced.TracedThread spec)

headāœ: Traced.TracedThread spec

tailāœ: List (Traced.TracedThread spec)


cons
āˆ€ (r : spec.Reservation), Mt.System.Traced.sum_reservations' r (headāœ :: tailāœ) = r + Mt.System.Traced.sum_reservations' IsReservation.empty (headāœ :: tailāœ)
spec: Spec

headāœ: Traced.TracedThread spec

l: List (Traced.TracedThread spec)

head: Traced.TracedThread spec

tail: List (Traced.TracedThread spec)

IH: āˆ€ (r : spec.Reservation), Mt.System.Traced.sum_reservations' r tail = r + Mt.System.Traced.sum_reservations' IsReservation.empty tail


cons
āˆ€ (r : spec.Reservation), Mt.System.Traced.sum_reservations' r (head :: tail) = r + Mt.System.Traced.sum_reservations' IsReservation.empty (head :: tail)
spec: Spec

head: Traced.TracedThread spec

l: List (Traced.TracedThread spec)

headāœ: Traced.TracedThread spec

tailāœ: List (Traced.TracedThread spec)


cons
āˆ€ (r : spec.Reservation), Mt.System.Traced.sum_reservations' r (headāœ :: tailāœ) = r + Mt.System.Traced.sum_reservations' IsReservation.empty (headāœ :: tailāœ)
spec: Spec

headāœ: Traced.TracedThread spec

l: List (Traced.TracedThread spec)

head: Traced.TracedThread spec

tail: List (Traced.TracedThread spec)

IH: āˆ€ (r : spec.Reservation), Mt.System.Traced.sum_reservations' r tail = r + Mt.System.Traced.sum_reservations' IsReservation.empty tail

r: spec.Reservation


cons
Mt.System.Traced.sum_reservations' r (head :: tail) = r + Mt.System.Traced.sum_reservations' IsReservation.empty (head :: tail)
spec: Spec

head: Traced.TracedThread spec

l: List (Traced.TracedThread spec)

headāœ: Traced.TracedThread spec

tailāœ: List (Traced.TracedThread spec)


cons
āˆ€ (r : spec.Reservation), Mt.System.Traced.sum_reservations' r (headāœ :: tailāœ) = r + Mt.System.Traced.sum_reservations' IsReservation.empty (headāœ :: tailāœ)
spec: Spec

headāœ: Traced.TracedThread spec

l: List (Traced.TracedThread spec)

head: Traced.TracedThread spec

tail: List (Traced.TracedThread spec)

IH: āˆ€ (r : spec.Reservation), Mt.System.Traced.sum_reservations' r tail = r + Mt.System.Traced.sum_reservations' IsReservation.empty tail

r: spec.Reservation


cons
Mt.System.Traced.sum_reservations' (r + head.reservation) tail = r + Mt.System.Traced.sum_reservations' (IsReservation.empty + head.reservation) tail
spec: Spec

head: Traced.TracedThread spec

l: List (Traced.TracedThread spec)

headāœ: Traced.TracedThread spec

tailāœ: List (Traced.TracedThread spec)


cons
āˆ€ (r : spec.Reservation), Mt.System.Traced.sum_reservations' r (headāœ :: tailāœ) = r + Mt.System.Traced.sum_reservations' IsReservation.empty (headāœ :: tailāœ)
spec: Spec

headāœ: Traced.TracedThread spec

l: List (Traced.TracedThread spec)

head: Traced.TracedThread spec

tail: List (Traced.TracedThread spec)

IH: āˆ€ (r : spec.Reservation), Mt.System.Traced.sum_reservations' r tail = r + Mt.System.Traced.sum_reservations' IsReservation.empty tail

r: spec.Reservation


cons
Mt.System.Traced.sum_reservations' (r + head.reservation) tail = r + Mt.System.Traced.sum_reservations' (IsReservation.empty + head.reservation) tail
spec: Spec

headāœ: Traced.TracedThread spec

l: List (Traced.TracedThread spec)

head: Traced.TracedThread spec

tail: List (Traced.TracedThread spec)

IH: āˆ€ (r : spec.Reservation), Mt.System.Traced.sum_reservations' r tail = r + Mt.System.Traced.sum_reservations' IsReservation.empty tail

r: spec.Reservation


cons
r + head.reservation + Mt.System.Traced.sum_reservations' IsReservation.empty tail = r + Mt.System.Traced.sum_reservations' (IsReservation.empty + head.reservation) tail
spec: Spec

headāœ: Traced.TracedThread spec

l: List (Traced.TracedThread spec)

head: Traced.TracedThread spec

tail: List (Traced.TracedThread spec)

IH: āˆ€ (r : spec.Reservation), Mt.System.Traced.sum_reservations' r tail = r + Mt.System.Traced.sum_reservations' IsReservation.empty tail

r: spec.Reservation


cons
Mt.System.Traced.sum_reservations' (r + head.reservation) tail = r + Mt.System.Traced.sum_reservations' (IsReservation.empty + head.reservation) tail
spec: Spec

headāœ: Traced.TracedThread spec

l: List (Traced.TracedThread spec)

head: Traced.TracedThread spec

tail: List (Traced.TracedThread spec)

IH: āˆ€ (r : spec.Reservation), Mt.System.Traced.sum_reservations' r tail = r + Mt.System.Traced.sum_reservations' IsReservation.empty tail

r: spec.Reservation


cons
r + (head.reservation + Mt.System.Traced.sum_reservations' IsReservation.empty tail) = r + Mt.System.Traced.sum_reservations' (IsReservation.empty + head.reservation) tail
spec: Spec

headāœ: Traced.TracedThread spec

l: List (Traced.TracedThread spec)

head: Traced.TracedThread spec

tail: List (Traced.TracedThread spec)

IH: āˆ€ (r : spec.Reservation), Mt.System.Traced.sum_reservations' r tail = r + Mt.System.Traced.sum_reservations' IsReservation.empty tail

r: spec.Reservation


cons
Mt.System.Traced.sum_reservations' (r + head.reservation) tail = r + Mt.System.Traced.sum_reservations' (IsReservation.empty + head.reservation) tail
spec: Spec

headāœ: Traced.TracedThread spec

l: List (Traced.TracedThread spec)

head: Traced.TracedThread spec

tail: List (Traced.TracedThread spec)

IH: āˆ€ (r : spec.Reservation), Mt.System.Traced.sum_reservations' r tail = r + Mt.System.Traced.sum_reservations' IsReservation.empty tail

r: spec.Reservation


cons
r + (head.reservation + Mt.System.Traced.sum_reservations' IsReservation.empty tail) = r + Mt.System.Traced.sum_reservations' head.reservation tail
spec: Spec

headāœ: Traced.TracedThread spec

l: List (Traced.TracedThread spec)

head: Traced.TracedThread spec

tail: List (Traced.TracedThread spec)

IH: āˆ€ (r : spec.Reservation), Mt.System.Traced.sum_reservations' r tail = r + Mt.System.Traced.sum_reservations' IsReservation.empty tail

r: spec.Reservation


cons
r + (head.reservation + Mt.System.Traced.sum_reservations' IsReservation.empty tail) = r + Mt.System.Traced.sum_reservations' head.reservation tail
spec: Spec

head: Traced.TracedThread spec

l: List (Traced.TracedThread spec)

headāœ: Traced.TracedThread spec

tailāœ: List (Traced.TracedThread spec)


cons
āˆ€ (r : spec.Reservation), Mt.System.Traced.sum_reservations' r (headāœ :: tailāœ) = r + Mt.System.Traced.sum_reservations' IsReservation.empty (headāœ :: tailāœ)
spec: Spec

headāœ: Traced.TracedThread spec

l: List (Traced.TracedThread spec)

head: Traced.TracedThread spec

tail: List (Traced.TracedThread spec)

IH: āˆ€ (r : spec.Reservation), Mt.System.Traced.sum_reservations' r tail = r + Mt.System.Traced.sum_reservations' IsReservation.empty tail

r: spec.Reservation


cons
r + (head.reservation + Mt.System.Traced.sum_reservations' IsReservation.empty tail) = r + Mt.System.Traced.sum_reservations' head.reservation tail
spec: Spec

headāœ: Traced.TracedThread spec

l: List (Traced.TracedThread spec)

head: Traced.TracedThread spec

tail: List (Traced.TracedThread spec)

IH: āˆ€ (r : spec.Reservation), Mt.System.Traced.sum_reservations' r tail = r + Mt.System.Traced.sum_reservations' IsReservation.empty tail

r: spec.Reservation


cons
r + (head.reservation + Mt.System.Traced.sum_reservations' IsReservation.empty tail) = r + (head.reservation + Mt.System.Traced.sum_reservations' IsReservation.empty tail)

Goals accomplished! šŸ™
protected theorem
decompose_reservation: āˆ€ (l : List (Traced.TracedThread spec)) (idx : Fin (List.length l)) (t : Traced.TracedThread spec), t = List.get l idx → sum_reservations l = sum_reservations (List.eraseIdx l idx.val) + t.reservation
decompose_reservation
(l :
List: Type ?u.1948 → Type ?u.1948
List
(
Traced.TracedThread: Spec → Type 1
Traced.TracedThread
spec: Spec
spec
)) (
idx: Fin (List.length l)
idx
:
Fin: Nat → Type
Fin
l.
length: {α : Type ?u.1951} → List α → Nat
length
)
t: ?m.1958
t
:
t: ?m.1958
t
= l.
get: {α : Type ?u.1963} → (as : List α) → Fin (List.length as) → α
get
idx: Fin (List.length l)
idx
→
sum_reservations: {spec : Spec} → List (Traced.TracedThread spec) → spec.Reservation
sum_reservations
l =
sum_reservations: {spec : Spec} → List (Traced.TracedThread spec) → spec.Reservation
sum_reservations
(l.
eraseIdx: {α : Type ?u.1978} → List α → Nat → List α
eraseIdx
idx: Fin (List.length l)
idx
.
val: {n : Nat} → Fin n → Nat
val
) +
t: ?m.1958
t
.
reservation: {spec : Spec} → Traced.TracedThread spec → spec.Reservation
reservation
:=

t = List.get l idx → sum_reservations l = sum_reservations (List.eraseIdx l idx.val) + t.reservation
spec: Spec

l: List (Traced.TracedThread spec)

idx: Fin (List.length l)

t: Traced.TracedThread spec

t_def: t = List.get l idx


sum_reservations l = sum_reservations (List.eraseIdx l idx.val) + t.reservation

t = List.get l idx → sum_reservations l = sum_reservations (List.eraseIdx l idx.val) + t.reservation
spec: Spec

l: List (Traced.TracedThread spec)

idx: Fin (List.length l)

t: Traced.TracedThread spec

t_def: t = List.get l idx


sum_reservations l = sum_reservations (List.eraseIdx l idx.val) + t.reservation

t = List.get l idx → sum_reservations l = sum_reservations (List.eraseIdx l idx.val) + t.reservation
spec: Spec

l: List (Traced.TracedThread spec)

idx: Fin (List.length l)

t: Traced.TracedThread spec

t_def: t = List.get l idx


sum_reservations l = sum_reservations (List.eraseIdx l idx.val) + t.reservation
spec: Spec

l: List (Traced.TracedThread spec)

idx: Fin (List.length l)

t: Traced.TracedThread spec

t_def: t = List.get l idx


sum_reservations l = sum_reservations (List.eraseIdx l idx.val) + (List.get l idx).reservation
spec: Spec

l: List (Traced.TracedThread spec)

idx: Fin (List.length l)

t: Traced.TracedThread spec

t_def: t = List.get l idx


sum_reservations l = sum_reservations (List.eraseIdx l idx.val) + (List.get l idx).reservation

t = List.get l idx → sum_reservations l = sum_reservations (List.eraseIdx l idx.val) + t.reservation
spec: Spec

l: List (Traced.TracedThread spec)

idx: Fin (List.length l)

t: Traced.TracedThread spec

t_def: t = List.get l idx


sum_reservations l = sum_reservations (List.eraseIdx l idx.val) + (List.get l idx).reservation

t = List.get l idx → sum_reservations l = sum_reservations (List.eraseIdx l idx.val) + t.reservation

t = List.get l idx → sum_reservations l = sum_reservations (List.eraseIdx l idx.val) + t.reservation

āˆ€ (idx : Fin (List.length l)), sum_reservations l = sum_reservations (List.eraseIdx l idx.val) + (List.get l idx).reservation

t = List.get l idx → sum_reservations l = sum_reservations (List.eraseIdx l idx.val) + t.reservation

nil
āˆ€ (idx : Fin (List.length [])), sum_reservations [] = sum_reservations (List.eraseIdx [] idx.val) + (List.get [] idx).reservation
spec: Spec

t, headāœ: Traced.TracedThread spec

tailāœ: List (Traced.TracedThread spec)


cons
āˆ€ (idx : Fin (List.length (headāœ :: tailāœ))), sum_reservations (headāœ :: tailāœ) = sum_reservations (List.eraseIdx (headāœ :: tailāœ) idx.val) + (List.get (headāœ :: tailāœ) idx).reservation

t = List.get l idx → sum_reservations l = sum_reservations (List.eraseIdx l idx.val) + t.reservation

nil
āˆ€ (idx : Fin (List.length [])), sum_reservations [] = sum_reservations (List.eraseIdx [] idx.val) + (List.get [] idx).reservation

nil
āˆ€ (idx : Fin (List.length [])), sum_reservations [] = sum_reservations (List.eraseIdx [] idx.val) + (List.get [] idx).reservation
spec: Spec

t, headāœ: Traced.TracedThread spec

tailāœ: List (Traced.TracedThread spec)


cons
āˆ€ (idx : Fin (List.length (headāœ :: tailāœ))), sum_reservations (headāœ :: tailāœ) = sum_reservations (List.eraseIdx (headāœ :: tailāœ) idx.val) + (List.get (headāœ :: tailāœ) idx).reservation
spec: Spec

t: Traced.TracedThread spec

idx: Fin (List.length [])


nil
sum_reservations [] = sum_reservations (List.eraseIdx [] idx.val) + (List.get [] idx).reservation

nil
āˆ€ (idx : Fin (List.length [])), sum_reservations [] = sum_reservations (List.eraseIdx [] idx.val) + (List.get [] idx).reservation
spec: Spec

t, headāœ: Traced.TracedThread spec

tailāœ: List (Traced.TracedThread spec)


cons
āˆ€ (idx : Fin (List.length (headāœ :: tailāœ))), sum_reservations (headāœ :: tailāœ) = sum_reservations (List.eraseIdx (headāœ :: tailāœ) idx.val) + (List.get (headāœ :: tailāœ) idx).reservation
spec: Spec

t: Traced.TracedThread spec

idx: Fin (List.length [])

this: idx.val < 0


nil
sum_reservations [] = sum_reservations (List.eraseIdx [] idx.val) + (List.get [] idx).reservation

nil
āˆ€ (idx : Fin (List.length [])), sum_reservations [] = sum_reservations (List.eraseIdx [] idx.val) + (List.get [] idx).reservation
spec: Spec

t, headāœ: Traced.TracedThread spec

tailāœ: List (Traced.TracedThread spec)


cons
āˆ€ (idx : Fin (List.length (headāœ :: tailāœ))), sum_reservations (headāœ :: tailāœ) = sum_reservations (List.eraseIdx (headāœ :: tailāœ) idx.val) + (List.get (headāœ :: tailāœ) idx).reservation

Goals accomplished! šŸ™

t = List.get l idx → sum_reservations l = sum_reservations (List.eraseIdx l idx.val) + t.reservation
spec: Spec

t, headāœ: Traced.TracedThread spec

tailāœ: List (Traced.TracedThread spec)


cons
āˆ€ (idx : Fin (List.length (headāœ :: tailāœ))), sum_reservations (headāœ :: tailāœ) = sum_reservations (List.eraseIdx (headāœ :: tailāœ) idx.val) + (List.get (headāœ :: tailāœ) idx).reservation
spec: Spec

t, headāœ: Traced.TracedThread spec

tailāœ: List (Traced.TracedThread spec)


cons
āˆ€ (idx : Fin (List.length (headāœ :: tailāœ))), sum_reservations (headāœ :: tailāœ) = sum_reservations (List.eraseIdx (headāœ :: tailāœ) idx.val) + (List.get (headāœ :: tailāœ) idx).reservation
spec: Spec

t, headāœ: Traced.TracedThread spec

tailāœ: List (Traced.TracedThread spec)

idx: Fin (List.length (headāœ :: tailāœ))


cons
sum_reservations (headāœ :: tailāœ) = sum_reservations (List.eraseIdx (headāœ :: tailāœ) idx.val) + (List.get (headāœ :: tailāœ) idx).reservation
spec: Spec

t, headāœ: Traced.TracedThread spec

tailāœ: List (Traced.TracedThread spec)


cons
āˆ€ (idx : Fin (List.length (headāœ :: tailāœ))), sum_reservations (headāœ :: tailāœ) = sum_reservations (List.eraseIdx (headāœ :: tailāœ) idx.val) + (List.get (headāœ :: tailāœ) idx).reservation
spec: Spec

t, thread: Traced.TracedThread spec

threads: List (Traced.TracedThread spec)

IH: āˆ€ (idx : Fin (List.length threads)), sum_reservations threads = sum_reservations (List.eraseIdx threads idx.val) + (List.get threads idx).reservation

idx: Fin (List.length (thread :: threads))


cons
sum_reservations (thread :: threads) = sum_reservations (List.eraseIdx (thread :: threads) idx.val) + (List.get (thread :: threads) idx).reservation
spec: Spec

t, headāœ: Traced.TracedThread spec

tailāœ: List (Traced.TracedThread spec)


cons
āˆ€ (idx : Fin (List.length (headāœ :: tailāœ))), sum_reservations (headāœ :: tailāœ) = sum_reservations (List.eraseIdx (headāœ :: tailāœ) idx.val) + (List.get (headāœ :: tailāœ) idx).reservation
spec: Spec

t, thread: Traced.TracedThread spec

threads: List (Traced.TracedThread spec)

IH: āˆ€ (idx : Fin (List.length threads)), sum_reservations threads = sum_reservations (List.eraseIdx threads idx.val) + (List.get threads idx).reservation

idx: Fin (List.length (thread :: threads))

h: idx.val = Nat.zero


cons.zero
sum_reservations (thread :: threads) = sum_reservations (List.eraseIdx (thread :: threads) Nat.zero) + (List.get (thread :: threads) idx).reservation
spec: Spec

t, thread: Traced.TracedThread spec

threads: List (Traced.TracedThread spec)

IH: āˆ€ (idx : Fin (List.length threads)), sum_reservations threads = sum_reservations (List.eraseIdx threads idx.val) + (List.get threads idx).reservation

idx: Fin (List.length (thread :: threads))

nāœ: Nat

h: idx.val = Nat.succ nāœ


cons.succ
sum_reservations (thread :: threads) = sum_reservations (List.eraseIdx (thread :: threads) (Nat.succ nāœ)) + (List.get (thread :: threads) idx).reservation
spec: Spec

t, headāœ: Traced.TracedThread spec

tailāœ: List (Traced.TracedThread spec)


cons
āˆ€ (idx : Fin (List.length (headāœ :: tailāœ))), sum_reservations (headāœ :: tailāœ) = sum_reservations (List.eraseIdx (headāœ :: tailāœ) idx.val) + (List.get (headāœ :: tailāœ) idx).reservation
spec: Spec

t, thread: Traced.TracedThread spec

threads: List (Traced.TracedThread spec)

IH: āˆ€ (idx : Fin (List.length threads)), sum_reservations threads = sum_reservations (List.eraseIdx threads idx.val) + (List.get threads idx).reservation

idx: Fin (List.length (thread :: threads))

h: idx.val = Nat.zero


cons.zero
sum_reservations (thread :: threads) = sum_reservations (List.eraseIdx (thread :: threads) Nat.zero) + (List.get (thread :: threads) idx).reservation
spec: Spec

t, thread: Traced.TracedThread spec

threads: List (Traced.TracedThread spec)

IH: āˆ€ (idx : Fin (List.length threads)), sum_reservations threads = sum_reservations (List.eraseIdx threads idx.val) + (List.get threads idx).reservation

idx: Fin (List.length (thread :: threads))

h: idx.val = Nat.zero


cons.zero
sum_reservations (thread :: threads) = sum_reservations (List.eraseIdx (thread :: threads) Nat.zero) + (List.get (thread :: threads) idx).reservation
spec: Spec

t, thread: Traced.TracedThread spec

threads: List (Traced.TracedThread spec)

IH: āˆ€ (idx : Fin (List.length threads)), sum_reservations threads = sum_reservations (List.eraseIdx threads idx.val) + (List.get threads idx).reservation

idx: Fin (List.length (thread :: threads))

nāœ: Nat

h: idx.val = Nat.succ nāœ


cons.succ
sum_reservations (thread :: threads) = sum_reservations (List.eraseIdx (thread :: threads) (Nat.succ nāœ)) + (List.get (thread :: threads) idx).reservation
spec: Spec

t, thread: Traced.TracedThread spec

threads: List (Traced.TracedThread spec)

IH: āˆ€ (idx : Fin (List.length threads)), sum_reservations threads = sum_reservations (List.eraseIdx threads idx.val) + (List.get threads idx).reservation

idx: Fin (List.length (thread :: threads))

h: idx.val = Nat.zero


cons.zero
sum_reservations (thread :: threads) = sum_reservations (List.eraseIdx (thread :: threads) Nat.zero) + (List.get (thread :: threads) idx).reservation
spec: Spec

t, thread: Traced.TracedThread spec

threads: List (Traced.TracedThread spec)

IH: āˆ€ (idx : Fin (List.length threads)), sum_reservations threads = sum_reservations (List.eraseIdx threads idx.val) + (List.get threads idx).reservation

idx: Fin (List.length (thread :: threads))

h: idx.val = Nat.zero


0 < List.length (thread :: threads)

Goals accomplished! šŸ™
spec: Spec

t, thread: Traced.TracedThread spec

threads: List (Traced.TracedThread spec)

IH: āˆ€ (idx : Fin (List.length threads)), sum_reservations threads = sum_reservations (List.eraseIdx threads idx.val) + (List.get threads idx).reservation

idx: Fin (List.length (thread :: threads))

h: idx.val = Nat.zero

this: idx = { val := 0, isLt := (_ : Nat.Linear.ExprCnstr.denote [List.length threads] { eq := false, lhs := Nat.Linear.Expr.add (Nat.Linear.Expr.num 0) (Nat.Linear.Expr.num 1), rhs := Nat.Linear.Expr.add (Nat.Linear.Expr.var 0) (Nat.Linear.Expr.num 1) }) }


cons.zero
sum_reservations (thread :: threads) = sum_reservations (List.eraseIdx (thread :: threads) Nat.zero) + (List.get (thread :: threads) idx).reservation
spec: Spec

t, thread: Traced.TracedThread spec

threads: List (Traced.TracedThread spec)

IH: āˆ€ (idx : Fin (List.length threads)), sum_reservations threads = sum_reservations (List.eraseIdx threads idx.val) + (List.get threads idx).reservation

idx: Fin (List.length (thread :: threads))

h: idx.val = Nat.zero


cons.zero
sum_reservations (thread :: threads) = sum_reservations (List.eraseIdx (thread :: threads) Nat.zero) + (List.get (thread :: threads) idx).reservation
spec: Spec

t, thread: Traced.TracedThread spec

threads: List (Traced.TracedThread spec)

IH: āˆ€ (idx : Fin (List.length threads)), sum_reservations threads = sum_reservations (List.eraseIdx threads idx.val) + (List.get threads idx).reservation

idx: Fin (List.length (thread :: threads))

nāœ: Nat

h: idx.val = Nat.succ nāœ


cons.succ
sum_reservations (thread :: threads) = sum_reservations (List.eraseIdx (thread :: threads) (Nat.succ nāœ)) + (List.get (thread :: threads) idx).reservation
spec: Spec

t, thread: Traced.TracedThread spec

threads: List (Traced.TracedThread spec)

IH: āˆ€ (idx : Fin (List.length threads)), sum_reservations threads = sum_reservations (List.eraseIdx threads idx.val) + (List.get threads idx).reservation

idx: Fin (List.length (thread :: threads))

h: idx.val = Nat.zero

this: idx = { val := 0, isLt := (_ : Nat.Linear.ExprCnstr.denote [List.length threads] { eq := false, lhs := Nat.Linear.Expr.add (Nat.Linear.Expr.num 0) (Nat.Linear.Expr.num 1), rhs := Nat.Linear.Expr.add (Nat.Linear.Expr.var 0) (Nat.Linear.Expr.num 1) }) }


cons.zero
thread.reservation + sum_reservations threads = sum_reservations threads + thread.reservation
spec: Spec

t, thread: Traced.TracedThread spec

threads: List (Traced.TracedThread spec)

IH: āˆ€ (idx : Fin (List.length threads)), sum_reservations threads = sum_reservations (List.eraseIdx threads idx.val) + (List.get threads idx).reservation

idx: Fin (List.length (thread :: threads))

h: idx.val = Nat.zero


cons.zero
sum_reservations (thread :: threads) = sum_reservations (List.eraseIdx (thread :: threads) Nat.zero) + (List.get (thread :: threads) idx).reservation
spec: Spec

t, thread: Traced.TracedThread spec

threads: List (Traced.TracedThread spec)

IH: āˆ€ (idx : Fin (List.length threads)), sum_reservations threads = sum_reservations (List.eraseIdx threads idx.val) + (List.get threads idx).reservation

idx: Fin (List.length (thread :: threads))

nāœ: Nat

h: idx.val = Nat.succ nāœ


cons.succ
sum_reservations (thread :: threads) = sum_reservations (List.eraseIdx (thread :: threads) (Nat.succ nāœ)) + (List.get (thread :: threads) idx).reservation

Goals accomplished! šŸ™
spec: Spec

t, headāœ: Traced.TracedThread spec

tailāœ: List (Traced.TracedThread spec)


cons
āˆ€ (idx : Fin (List.length (headāœ :: tailāœ))), sum_reservations (headāœ :: tailāœ) = sum_reservations (List.eraseIdx (headāœ :: tailāœ) idx.val) + (List.get (headāœ :: tailāœ) idx).reservation
spec: Spec

t, thread: Traced.TracedThread spec

threads: List (Traced.TracedThread spec)

IH: āˆ€ (idx : Fin (List.length threads)), sum_reservations threads = sum_reservations (List.eraseIdx threads idx.val) + (List.get threads idx).reservation

idx: Fin (List.length (thread :: threads))

nāœ: Nat

h: idx.val = Nat.succ nāœ


cons.succ
sum_reservations (thread :: threads) = sum_reservations (List.eraseIdx (thread :: threads) (Nat.succ nāœ)) + (List.get (thread :: threads) idx).reservation
spec: Spec

t, thread: Traced.TracedThread spec

threads: List (Traced.TracedThread spec)

IH: āˆ€ (idx : Fin (List.length threads)), sum_reservations threads = sum_reservations (List.eraseIdx threads idx.val) + (List.get threads idx).reservation

idx: Fin (List.length (thread :: threads))

nāœ: Nat

h: idx.val = Nat.succ nāœ


cons.succ
sum_reservations (thread :: threads) = sum_reservations (List.eraseIdx (thread :: threads) (Nat.succ nāœ)) + (List.get (thread :: threads) idx).reservation
spec: Spec

t, thread: Traced.TracedThread spec

threads: List (Traced.TracedThread spec)

IH: āˆ€ (idx : Fin (List.length threads)), sum_reservations threads = sum_reservations (List.eraseIdx threads idx.val) + (List.get threads idx).reservation

idx: Fin (List.length (thread :: threads))

n: Nat

h: idx.val = Nat.succ n


cons.succ
sum_reservations (thread :: threads) = sum_reservations (List.eraseIdx (thread :: threads) (Nat.succ n)) + (List.get (thread :: threads) idx).reservation
spec: Spec

t, thread: Traced.TracedThread spec

threads: List (Traced.TracedThread spec)

IH: āˆ€ (idx : Fin (List.length threads)), sum_reservations threads = sum_reservations (List.eraseIdx threads idx.val) + (List.get threads idx).reservation

idx: Fin (List.length (thread :: threads))

nāœ: Nat

h: idx.val = Nat.succ nāœ


cons.succ
sum_reservations (thread :: threads) = sum_reservations (List.eraseIdx (thread :: threads) (Nat.succ nāœ)) + (List.get (thread :: threads) idx).reservation
spec: Spec

t, thread: Traced.TracedThread spec

threads: List (Traced.TracedThread spec)

IH: āˆ€ (idx : Fin (List.length threads)), sum_reservations threads = sum_reservations (List.eraseIdx threads idx.val) + (List.get threads idx).reservation

idx: Fin (List.length (thread :: threads))

n: Nat

h: idx.val = Nat.succ n

idx_ok: n + 1 < List.length (thread :: threads)


cons.succ
sum_reservations (thread :: threads) = sum_reservations (List.eraseIdx (thread :: threads) (Nat.succ n)) + (List.get (thread :: threads) idx).reservation
spec: Spec

t, thread: Traced.TracedThread spec

threads: List (Traced.TracedThread spec)

IH: āˆ€ (idx : Fin (List.length threads)), sum_reservations threads = sum_reservations (List.eraseIdx threads idx.val) + (List.get threads idx).reservation

idx: Fin (List.length (thread :: threads))

nāœ: Nat

h: idx.val = Nat.succ nāœ


cons.succ
sum_reservations (thread :: threads) = sum_reservations (List.eraseIdx (thread :: threads) (Nat.succ nāœ)) + (List.get (thread :: threads) idx).reservation
spec: Spec

t, thread: Traced.TracedThread spec

threads: List (Traced.TracedThread spec)

IH: āˆ€ (idx : Fin (List.length threads)), sum_reservations threads = sum_reservations (List.eraseIdx threads idx.val) + (List.get threads idx).reservation

idx: Fin (List.length (thread :: threads))

n: Nat

h: idx.val = Nat.succ n

idx_ok: n + 1 < List.length (thread :: threads)

this: idx = { val := n + 1, isLt := idx_ok }


cons.succ
sum_reservations (thread :: threads) = sum_reservations (List.eraseIdx (thread :: threads) (Nat.succ n)) + (List.get (thread :: threads) idx).reservation
spec: Spec

t, thread: Traced.TracedThread spec

threads: List (Traced.TracedThread spec)

IH: āˆ€ (idx : Fin (List.length threads)), sum_reservations threads = sum_reservations (List.eraseIdx threads idx.val) + (List.get threads idx).reservation

idx: Fin (List.length (thread :: threads))

nāœ: Nat

h: idx.val = Nat.succ nāœ


cons.succ
sum_reservations (thread :: threads) = sum_reservations (List.eraseIdx (thread :: threads) (Nat.succ nāœ)) + (List.get (thread :: threads) idx).reservation
spec: Spec

t, thread: Traced.TracedThread spec

threads: List (Traced.TracedThread spec)

IH: āˆ€ (idx : Fin (List.length threads)), sum_reservations threads = sum_reservations (List.eraseIdx threads idx.val) + (List.get threads idx).reservation

idx: Fin (List.length (thread :: threads))

n: Nat

h: idx.val = Nat.succ n

idx_ok: n + 1 < List.length (thread :: threads)

this: idx = { val := n + 1, isLt := idx_ok }


cons.succ
thread.reservation + sum_reservations threads = thread.reservation + sum_reservations (List.eraseIdx threads n) + (List.get threads { val := n, isLt := (_ : Nat.succ n ≤ List.length threads) }).reservation
spec: Spec

t, thread: Traced.TracedThread spec

threads: List (Traced.TracedThread spec)

IH: āˆ€ (idx : Fin (List.length threads)), sum_reservations threads = sum_reservations (List.eraseIdx threads idx.val) + (List.get threads idx).reservation

idx: Fin (List.length (thread :: threads))

nāœ: Nat

h: idx.val = Nat.succ nāœ


cons.succ
sum_reservations (thread :: threads) = sum_reservations (List.eraseIdx (thread :: threads) (Nat.succ nāœ)) + (List.get (thread :: threads) idx).reservation
spec: Spec

t, thread: Traced.TracedThread spec

threads: List (Traced.TracedThread spec)

IH: āˆ€ (idx : Fin (List.length threads)), sum_reservations threads = sum_reservations (List.eraseIdx threads idx.val) + (List.get threads idx).reservation

n: Nat

idx_ok: n + 1 < List.length (thread :: threads)


cons.succ
thread.reservation + sum_reservations threads = thread.reservation + sum_reservations (List.eraseIdx threads n) + (List.get threads { val := n, isLt := (_ : Nat.succ n ≤ List.length threads) }).reservation
spec: Spec

t, thread: Traced.TracedThread spec

threads: List (Traced.TracedThread spec)

IH: āˆ€ (idx : Fin (List.length threads)), sum_reservations threads = sum_reservations (List.eraseIdx threads idx.val) + (List.get threads idx).reservation

idx: Fin (List.length (thread :: threads))

nāœ: Nat

h: idx.val = Nat.succ nāœ


cons.succ
sum_reservations (thread :: threads) = sum_reservations (List.eraseIdx (thread :: threads) (Nat.succ nāœ)) + (List.get (thread :: threads) idx).reservation
spec: Spec

t, thread: Traced.TracedThread spec

threads: List (Traced.TracedThread spec)

IH: āˆ€ (idx : Fin (List.length threads)), sum_reservations threads = sum_reservations (List.eraseIdx threads idx.val) + (List.get threads idx).reservation

n: Nat

idx_ok: n + 1 < List.length (thread :: threads)


cons.succ
thread.reservation + sum_reservations threads = thread.reservation + sum_reservations (List.eraseIdx threads n) + (List.get threads { val := n, isLt := (_ : Nat.succ n ≤ List.length threads) }).reservation
spec: Spec

t, thread: Traced.TracedThread spec

threads: List (Traced.TracedThread spec)

IH: āˆ€ (idx : Fin (List.length threads)), sum_reservations threads = sum_reservations (List.eraseIdx threads idx.val) + (List.get threads idx).reservation

n: Nat

idx_ok: n + 1 < List.length (thread :: threads)


cons.succ
thread.reservation + sum_reservations threads = thread.reservation + (sum_reservations (List.eraseIdx threads n) + (List.get threads { val := n, isLt := (_ : Nat.succ n ≤ List.length threads) }).reservation)
spec: Spec

t, thread: Traced.TracedThread spec

threads: List (Traced.TracedThread spec)

IH: āˆ€ (idx : Fin (List.length threads)), sum_reservations threads = sum_reservations (List.eraseIdx threads idx.val) + (List.get threads idx).reservation

n: Nat

idx_ok: n + 1 < List.length (thread :: threads)


cons.succ
thread.reservation + sum_reservations threads = thread.reservation + (sum_reservations (List.eraseIdx threads n) + (List.get threads { val := n, isLt := (_ : Nat.succ n ≤ List.length threads) }).reservation)
spec: Spec

t, thread: Traced.TracedThread spec

threads: List (Traced.TracedThread spec)

IH: āˆ€ (idx : Fin (List.length threads)), sum_reservations threads = sum_reservations (List.eraseIdx threads idx.val) + (List.get threads idx).reservation

idx: Fin (List.length (thread :: threads))

nāœ: Nat

h: idx.val = Nat.succ nāœ


cons.succ
sum_reservations (thread :: threads) = sum_reservations (List.eraseIdx (thread :: threads) (Nat.succ nāœ)) + (List.get (thread :: threads) idx).reservation
spec: Spec

t, thread: Traced.TracedThread spec

threads: List (Traced.TracedThread spec)

IH: āˆ€ (idx : Fin (List.length threads)), sum_reservations threads = sum_reservations (List.eraseIdx threads idx.val) + (List.get threads idx).reservation

n: Nat

idx_ok: n + 1 < List.length (thread :: threads)


cons.succ
sum_reservations threads = sum_reservations (List.eraseIdx threads n) + (List.get threads { val := n, isLt := (_ : Nat.succ n ≤ List.length threads) }).reservation
spec: Spec

t, thread: Traced.TracedThread spec

threads: List (Traced.TracedThread spec)

IH: āˆ€ (idx : Fin (List.length threads)), sum_reservations threads = sum_reservations (List.eraseIdx threads idx.val) + (List.get threads idx).reservation

idx: Fin (List.length (thread :: threads))

nāœ: Nat

h: idx.val = Nat.succ nāœ


cons.succ
sum_reservations (thread :: threads) = sum_reservations (List.eraseIdx (thread :: threads) (Nat.succ nāœ)) + (List.get (thread :: threads) idx).reservation

Goals accomplished! šŸ™
end Mt.System.Traced