import Mt.System.Basic import Mt.System.BasicAux import Mt.System.Traced import Mt.Utils.List namespace Mt.System variable {spec :spec: SpecSpec} localSpec: Type 1instance :instance: {spec : Spec} → IsReservation spec.ReservationIsReservationIsReservation: Type → Typespec.spec: SpecReservation :=Reservation: Spec → Typespec.spec: Specis_reservation open Utils /-- Central validation predicate for reasoning about systems. A valid system has the following property: Given any future iteration of the system (or the system itself), the following holds: * No threads have panicked yet (and they never will) * Its current state is valid according to the specification -/ def valid (is_reservation: (self : Spec) → IsReservation self.Reservations :s: System specSystemSystem: Spec → Type 1spec) :spec: SpecProp := ∀Prop: Types' :s': System specSystemSystem: Spec → Type 1spec,spec: Specs.reduces_to_or_eqs: System specs' →s': System specs'.panics =s': System spec0 ∧ ∃0: ?m.45r,r: ?m.66spec.spec: Specvalidatevalidate: (self : Spec) → self.Reservation → self.State → Proprr: ?m.66s'.state theorems': System specfundamental_validation_theorem (fundamental_validation_theorem: ∀ (s : System spec), s.panics = 0 → Spec.validate spec IsReservation.empty s.state → (∀ (t : Thread spec), t ∈ s.threads → Thread.valid t) → valid ss :s: System specSystemSystem: Spec → Type 1spec) (spec: Specno_panics_yet :no_panics_yet: s.panics = 0s.panics =s: System spec0) (0: ?m.92initial_valid :initial_valid: Spec.validate spec IsReservation.empty s.statespec.spec: Specvalidatevalidate: (self : Spec) → self.Reservation → self.State → PropIsReservation.emptyIsReservation.empty: {T : Type} → [self : IsReservation T] → Ts.state) (s: System specthreads_valid : ∀threads_valid: ∀ (t : Thread spec), t ∈ s.threads → Thread.valid tt,t: ?m.123t ∈t: ?m.123s.threads →s: System spect.valid) :t: ?m.123s.valid :=s: System specspec: Spec
s: System spec
no_panics_yet: s.panics = 0
initial_valid: Spec.validate spec IsReservation.empty s.state
threads_valid: ∀ (t : Thread spec), t ∈ s.threads → Thread.valid tvalid sspec: Spec
s: System spec
no_panics_yet: s.panics = 0
initial_valid: Spec.validate spec IsReservation.empty s.state
threads_valid: ∀ (t : Thread spec), t ∈ s.threads → Thread.valid t
s': System spec
s_to_s': reduces_to_or_eq s s's'.panics = 0 ∧ ∃ r, Spec.validate spec r s'.statespec: Spec
s: System spec
no_panics_yet: s.panics = 0
initial_valid: Spec.validate spec IsReservation.empty s.state
threads_valid: ∀ (t : Thread spec), t ∈ s.threads → Thread.valid tvalid sspec: Spec
s: System spec
no_panics_yet: s.panics = 0
initial_valid: Spec.validate spec IsReservation.empty s.state
threads_valid: ∀ (t : Thread spec), t ∈ s.threads → Thread.valid t
s': System spec
inls'.panics = 0 ∧ ∃ r, Spec.validate spec r s'.statespec: Spec
s: System spec
no_panics_yet: s.panics = 0
initial_valid: Spec.validate spec IsReservation.empty s.state
threads_valid: ∀ (t : Thread spec), t ∈ s.threads → Thread.valid t
s': System spec
inrs'.panics = 0 ∧ ∃ r, Spec.validate spec r s'.statespec: Spec
s: System spec
no_panics_yet: s.panics = 0
initial_valid: Spec.validate spec IsReservation.empty s.state
threads_valid: ∀ (t : Thread spec), t ∈ s.threads → Thread.valid t
s': System spec
s_to_s': reduces_to_or_eq s s's'.panics = 0 ∧ ∃ r, Spec.validate spec r s'.statespec: Spec
s: System spec
no_panics_yet: s.panics = 0
initial_valid: Spec.validate spec IsReservation.empty s.state
threads_valid: ∀ (t : Thread spec), t ∈ s.threads → Thread.valid t
s': System spec
inls'.panics = 0 ∧ ∃ r, Spec.validate spec r s'.statespec: Spec
s: System spec
no_panics_yet: s.panics = 0
initial_valid: Spec.validate spec IsReservation.empty s.state
threads_valid: ∀ (t : Thread spec), t ∈ s.threads → Thread.valid t
s': System spec
inrs'.panics = 0 ∧ ∃ r, Spec.validate spec r s'.statespec: Spec
s: System spec
no_panics_yet: s.panics = 0
initial_valid: Spec.validate spec IsReservation.empty s.state
threads_valid: ∀ (t : Thread spec), t ∈ s.threads → Thread.valid t
s': System spec
s_to_s': reduces_to_or_eq s s's'.panics = 0 ∧ ∃ r, Spec.validate spec r s'.statespec: Spec
s: System spec
no_panics_yet: s.panics = 0
initial_valid: Spec.validate spec IsReservation.empty s.state
threads_valid: ∀ (t : Thread spec), t ∈ s.threads → Thread.valid t
s': System spec
h: s = s'
inls'.panics = 0 ∧ ∃ r, Spec.validate spec r s'.statespec: Spec
s: System spec
no_panics_yet: s.panics = 0
initial_valid: Spec.validate spec IsReservation.empty s.state
threads_valid: ∀ (t : Thread spec), t ∈ s.threads → Thread.valid tvalid sspec: Spec
s: System spec
no_panics_yet: s.panics = 0
initial_valid: Spec.validate spec IsReservation.empty s.state
threads_valid: ∀ (t : Thread spec), t ∈ s.threads → Thread.valid t
s': System spec
h: s = s'
inls'.panics = 0 ∧ ∃ r, Spec.validate spec r s'.statespec: Spec
s: System spec
no_panics_yet: s.panics = 0
initial_valid: Spec.validate spec IsReservation.empty s.state
threads_valid: ∀ (t : Thread spec), t ∈ s.threads → Thread.valid t
s': System spec
h: s = s'
inls'.panics = 0 ∧ ∃ r, Spec.validate spec r s'.statespec: Spec
s: System spec
no_panics_yet: s.panics = 0
initial_valid: Spec.validate spec IsReservation.empty s.state
threads_valid: ∀ (t : Thread spec), t ∈ s.threads → Thread.valid t
s': System spec
h: reduces_to s s'
inrs'.panics = 0 ∧ ∃ r, Spec.validate spec r s'.statespec: Spec
s: System spec
no_panics_yet: s.panics = 0
initial_valid: Spec.validate spec IsReservation.empty s.state
threads_valid: ∀ (t : Thread spec), t ∈ s.threads → Thread.valid t
s': System spec
h: s = s'
inls'.panics = 0 ∧ ∃ r, Spec.validate spec r s'.statespec: Spec
s: System spec
no_panics_yet: s.panics = 0
initial_valid: Spec.validate spec IsReservation.empty s.state
threads_valid: ∀ (t : Thread spec), t ∈ s.threads → Thread.valid t
s': System spec
h: s = s'
inls.panics = 0 ∧ ∃ r, Spec.validate spec r s.statespec: Spec
s: System spec
no_panics_yet: s.panics = 0
initial_valid: Spec.validate spec IsReservation.empty s.state
threads_valid: ∀ (t : Thread spec), t ∈ s.threads → Thread.valid t
s': System spec
h: s = s'
inls.panics = 0 ∧ ∃ r, Spec.validate spec r s.statespec: Spec
s: System spec
no_panics_yet: s.panics = 0
initial_valid: Spec.validate spec IsReservation.empty s.state
threads_valid: ∀ (t : Thread spec), t ∈ s.threads → Thread.valid t
s': System spec
h: s = s'
inls'.panics = 0 ∧ ∃ r, Spec.validate spec r s'.statespec: Spec
s: System spec
no_panics_yet: s.panics = 0
initial_valid: Spec.validate spec IsReservation.empty s.state
threads_valid: ∀ (t : Thread spec), t ∈ s.threads → Thread.valid t
s': System spec
h: reduces_to s s'
inrs'.panics = 0 ∧ ∃ r, Spec.validate spec r s'.stateGoals accomplished! 🐙spec: Spec
s: System spec
no_panics_yet: s.panics = 0
initial_valid: Spec.validate spec IsReservation.empty s.state
threads_valid: ∀ (t : Thread spec), t ∈ s.threads → Thread.valid tvalid sspec: Spec
s: System spec
no_panics_yet: s.panics = 0
initial_valid: Spec.validate spec IsReservation.empty s.state
threads_valid: ∀ (t : Thread spec), t ∈ s.threads → Thread.valid t
s': System spec
h: reduces_to s s'
traced:= Traced.TracedSystem.mk_initial s: Traced.TracedSystem spec
inrs'.panics = 0 ∧ ∃ r, Spec.validate spec r s'.statespec: Spec
s: System spec
no_panics_yet: s.panics = 0
initial_valid: Spec.validate spec IsReservation.empty s.state
threads_valid: ∀ (t : Thread spec), t ∈ s.threads → Thread.valid tvalid sspec: Spec
s: System spec
no_panics_yet: s.panics = 0
initial_valid: Spec.validate spec IsReservation.empty s.state
threads_valid: ∀ (t : Thread spec), t ∈ s.threads → Thread.valid t
s': System spec
h: reduces_to s s'
traced:= Traced.TracedSystem.mk_initial s: Traced.TracedSystem spec
traced_valid: Traced.TracedSystem.valid traced
inrs'.panics = 0 ∧ ∃ r, Spec.validate spec r s'.statespec: Spec
s: System spec
no_panics_yet: s.panics = 0
initial_valid: Spec.validate spec IsReservation.empty s.state
threads_valid: ∀ (t : Thread spec), t ∈ s.threads → Thread.valid tvalid sspec: Spec
s: System spec
no_panics_yet: s.panics = 0
initial_valid: Spec.validate spec IsReservation.empty s.state
threads_valid: ∀ (t : Thread spec), t ∈ s.threads → Thread.valid t
s': System spec
h: reduces_to s s'
traced:= Traced.TracedSystem.mk_initial s: Traced.TracedSystem spec
traced_valid: Traced.TracedSystem.valid traced
inrs'.panics = 0 ∧ ∃ r, Spec.validate spec r s'.statespec: Spec
s: System spec
no_panics_yet: s.panics = 0
initial_valid: Spec.validate spec IsReservation.empty s.state
threads_valid: ∀ (t : Thread spec), t ∈ s.threads → Thread.valid t
s': System spec
h: reduces_to s s'
traced:= Traced.TracedSystem.mk_initial s: Traced.TracedSystem spec
traced_valid: Traced.TracedSystem.valid traced
w✝: Traced.TracedSystem spec
intros'.panics = 0 ∧ ∃ r, Spec.validate spec r s'.statespec: Spec
s: System spec
no_panics_yet: s.panics = 0
initial_valid: Spec.validate spec IsReservation.empty s.state
threads_valid: ∀ (t : Thread spec), t ∈ s.threads → Thread.valid t
s': System spec
h: reduces_to s s'
traced:= Traced.TracedSystem.mk_initial s: Traced.TracedSystem spec
traced_valid: Traced.TracedSystem.valid traced
this: ∃ ts, Traced.TracedSystem.to_system ts = s' ∧ Traced.TracedSystem.valid tss'.panics = 0 ∧ ∃ r, Spec.validate spec r s'.statespec: Spec
s: System spec
no_panics_yet: s.panics = 0
initial_valid: Spec.validate spec IsReservation.empty s.state
threads_valid: ∀ (t : Thread spec), t ∈ s.threads → Thread.valid t
s': System spec
h: reduces_to s s'
traced:= Traced.TracedSystem.mk_initial s: Traced.TracedSystem spec
traced_valid: Traced.TracedSystem.valid traced
ts: Traced.TracedSystem spec
ts_hyp: Traced.TracedSystem.to_system ts = s' ∧ Traced.TracedSystem.valid ts
intros'.panics = 0 ∧ ∃ r, Spec.validate spec r s'.statespec: Spec
s: System spec
no_panics_yet: s.panics = 0
initial_valid: Spec.validate spec IsReservation.empty s.state
threads_valid: ∀ (t : Thread spec), t ∈ s.threads → Thread.valid t
s': System spec
h: reduces_to s s'
traced:= Traced.TracedSystem.mk_initial s: Traced.TracedSystem spec
traced_valid: Traced.TracedSystem.valid traced
this: ∃ ts, Traced.TracedSystem.to_system ts = s' ∧ Traced.TracedSystem.valid tss'.panics = 0 ∧ ∃ r, Spec.validate spec r s'.statespec: Spec
s: System spec
no_panics_yet: s.panics = 0
initial_valid: Spec.validate spec IsReservation.empty s.state
threads_valid: ∀ (t : Thread spec), t ∈ s.threads → Thread.valid t
s': System spec
h: reduces_to s s'
traced:= Traced.TracedSystem.mk_initial s: Traced.TracedSystem spec
traced_valid: Traced.TracedSystem.valid traced
ts: Traced.TracedSystem spec
ts_hyp: Traced.TracedSystem.to_system ts = s' ∧ Traced.TracedSystem.valid ts
intro∃ r, Spec.validate spec r ts.statespec: Spec
s: System spec
no_panics_yet: s.panics = 0
initial_valid: Spec.validate spec IsReservation.empty s.state
threads_valid: ∀ (t : Thread spec), t ∈ s.threads → Thread.valid t
s': System spec
h: reduces_to s s'
traced:= Traced.TracedSystem.mk_initial s: Traced.TracedSystem spec
traced_valid: Traced.TracedSystem.valid traced
this: ∃ ts, Traced.TracedSystem.to_system ts = s' ∧ Traced.TracedSystem.valid tss'.panics = 0 ∧ ∃ r, Spec.validate spec r s'.statespec: Spec
s: System spec
no_panics_yet: s.panics = 0
initial_valid: Spec.validate spec IsReservation.empty s.state
threads_valid: ∀ (t : Thread spec), t ∈ s.threads → Thread.valid t
s': System spec
h: reduces_to s s'
traced:= Traced.TracedSystem.mk_initial s: Traced.TracedSystem spec
traced_valid: Traced.TracedSystem.valid traced
ts: Traced.TracedSystem spec
ts_hyp: Traced.TracedSystem.to_system ts = s' ∧ Traced.TracedSystem.valid ts
introSpec.validate spec (Traced.TracedSystem.reservations ts) ts.statespec: Spec
s: System spec
no_panics_yet: s.panics = 0
initial_valid: Spec.validate spec IsReservation.empty s.state
threads_valid: ∀ (t : Thread spec), t ∈ s.threads → Thread.valid t
s': System spec
h: reduces_to s s'
traced:= Traced.TracedSystem.mk_initial s: Traced.TracedSystem spec
traced_valid: Traced.TracedSystem.valid traced
this: ∃ ts, Traced.TracedSystem.to_system ts = s' ∧ Traced.TracedSystem.valid tss'.panics = 0 ∧ ∃ r, Spec.validate spec r s'.stateGoals accomplished! 🐙spec: Spec
s: System spec
no_panics_yet: s.panics = 0
initial_valid: Spec.validate spec IsReservation.empty s.state
threads_valid: ∀ (t : Thread spec), t ∈ s.threads → Thread.valid tvalid sspec: Spec
s: System spec
no_panics_yet: s.panics = 0
s': System spec
h: reduces_to s s'
traced:= Traced.TracedSystem.mk_initial s: Traced.TracedSystem spec
traced_valid: Traced.TracedSystem.valid traced
inr∃ ts, Traced.TracedSystem.to_system ts = s' ∧ Traced.TracedSystem.valid tsspec: Spec
s: System spec
no_panics_yet: s.panics = 0
initial_valid: Spec.validate spec IsReservation.empty s.state
threads_valid: ∀ (t : Thread spec), t ∈ s.threads → Thread.valid tvalid sspec: Spec
s: System spec
no_panics_yet: s.panics = 0
s': System spec
h: reduces_to s s'
traced:= Traced.TracedSystem.mk_initial s: Traced.TracedSystem spec
traced_valid: Traced.TracedSystem.valid traced
inr∃ ts, Traced.TracedSystem.to_system ts = s' ∧ Traced.TracedSystem.valid tsspec: Spec
s: System spec
no_panics_yet: s.panics = 0
s': System spec
h: reduces_to s s'
traced:= Traced.TracedSystem.mk_initial s: Traced.TracedSystem spec
traced_valid: Traced.TracedSystem.valid traced
this: ∀ (ts : Traced.TracedSystem spec), Traced.TracedSystem.valid ts → s = Traced.TracedSystem.to_system ts → ∃ ts', Traced.TracedSystem.to_system ts' = s' ∧ Traced.TracedSystem.valid ts's = Traced.TracedSystem.to_system tracedspec: Spec
s: System spec
no_panics_yet: s.panics = 0
s': System spec
h: reduces_to s s'
traced:= Traced.TracedSystem.mk_initial s: Traced.TracedSystem spec
traced_valid: Traced.TracedSystem.valid traced
this: ∀ (ts : Traced.TracedSystem spec), Traced.TracedSystem.valid ts → s = Traced.TracedSystem.to_system ts → ∃ ts', Traced.TracedSystem.to_system ts' = s' ∧ Traced.TracedSystem.valid ts'∃ ts, Traced.TracedSystem.to_system ts = s' ∧ Traced.TracedSystem.valid tsGoals accomplished! 🐙spec: Spec
s: System spec
no_panics_yet: s.panics = 0
initial_valid: Spec.validate spec IsReservation.empty s.state
threads_valid: ∀ (t : Thread spec), t ∈ s.threads → Thread.valid tvalid s
inr∀ (ts : Traced.TracedSystem spec), Traced.TracedSystem.valid ts → s = Traced.TracedSystem.to_system ts → ∃ ts', Traced.TracedSystem.to_system ts' = s' ∧ Traced.TracedSystem.valid ts'spec: Spec
s: System spec
no_panics_yet: s.panics = 0
initial_valid: Spec.validate spec IsReservation.empty s.state
threads_valid: ∀ (t : Thread spec), t ∈ s.threads → Thread.valid tvalid s
inr.single∀ (ts : Traced.TracedSystem spec), Traced.TracedSystem.valid ts → a✝ = Traced.TracedSystem.to_system ts → ∃ ts', Traced.TracedSystem.to_system ts' = b✝ ∧ Traced.TracedSystem.valid ts'
inr.trans∀ (ts : Traced.TracedSystem spec), Traced.TracedSystem.valid ts → a✝ = Traced.TracedSystem.to_system ts → ∃ ts', Traced.TracedSystem.to_system ts' = c✝ ∧ Traced.TracedSystem.valid ts'spec: Spec
s: System spec
no_panics_yet: s.panics = 0
initial_valid: Spec.validate spec IsReservation.empty s.state
threads_valid: ∀ (t : Thread spec), t ∈ s.threads → Thread.valid tvalid s
inr.single∀ (ts : Traced.TracedSystem spec), Traced.TracedSystem.valid ts → a✝ = Traced.TracedSystem.to_system ts → ∃ ts', Traced.TracedSystem.to_system ts' = b✝ ∧ Traced.TracedSystem.valid ts'
inr.single∀ (ts : Traced.TracedSystem spec), Traced.TracedSystem.valid ts → a✝ = Traced.TracedSystem.to_system ts → ∃ ts', Traced.TracedSystem.to_system ts' = b✝ ∧ Traced.TracedSystem.valid ts'
inr.trans∀ (ts : Traced.TracedSystem spec), Traced.TracedSystem.valid ts → a✝ = Traced.TracedSystem.to_system ts → ∃ ts', Traced.TracedSystem.to_system ts' = c✝ ∧ Traced.TracedSystem.valid ts'
inr.single∀ (ts : Traced.TracedSystem spec), Traced.TracedSystem.valid ts → a✝ = Traced.TracedSystem.to_system ts → ∃ ts', Traced.TracedSystem.to_system ts' = b✝ ∧ Traced.TracedSystem.valid ts'
inr.single∀ (ts : Traced.TracedSystem spec), Traced.TracedSystem.valid ts → a✝ = Traced.TracedSystem.to_system ts → ∃ ts', Traced.TracedSystem.to_system ts' = b✝ ∧ Traced.TracedSystem.valid ts'
inr.trans∀ (ts : Traced.TracedSystem spec), Traced.TracedSystem.valid ts → a✝ = Traced.TracedSystem.to_system ts → ∃ ts', Traced.TracedSystem.to_system ts' = c✝ ∧ Traced.TracedSystem.valid ts'
inr.single∀ (ts : Traced.TracedSystem spec), Traced.TracedSystem.valid ts → a✝ = Traced.TracedSystem.to_system ts → ∃ ts', Traced.TracedSystem.to_system ts' = b✝ ∧ Traced.TracedSystem.valid ts'
inr.single∀ (ts : Traced.TracedSystem spec), Traced.TracedSystem.valid ts → a✝ = Traced.TracedSystem.to_system ts → ∃ ts', Traced.TracedSystem.to_system ts' = b✝ ∧ Traced.TracedSystem.valid ts'
inr.trans∀ (ts : Traced.TracedSystem spec), Traced.TracedSystem.valid ts → a✝ = Traced.TracedSystem.to_system ts → ∃ ts', Traced.TracedSystem.to_system ts' = c✝ ∧ Traced.TracedSystem.valid ts'
inr.single∀ (ts : Traced.TracedSystem spec), Traced.TracedSystem.valid ts → s = Traced.TracedSystem.to_system ts → ∃ ts', Traced.TracedSystem.to_system ts' = s' ∧ Traced.TracedSystem.valid ts'
inr.single∀ (ts : Traced.TracedSystem spec), Traced.TracedSystem.valid ts → a✝ = Traced.TracedSystem.to_system ts → ∃ ts', Traced.TracedSystem.to_system ts' = b✝ ∧ Traced.TracedSystem.valid ts'
inr.trans∀ (ts : Traced.TracedSystem spec), Traced.TracedSystem.valid ts → a✝ = Traced.TracedSystem.to_system ts → ∃ ts', Traced.TracedSystem.to_system ts' = c✝ ∧ Traced.TracedSystem.valid ts'spec: Spec
s, s': System spec
idx: ThreadIndex s
iteration: iterate s idx = s'
ts: Traced.TracedSystem spec
ts_valid: Traced.TracedSystem.valid ts
s_def: s = Traced.TracedSystem.to_system ts
inr.single∃ ts', Traced.TracedSystem.to_system ts' = s' ∧ Traced.TracedSystem.valid ts'
inr.single∀ (ts : Traced.TracedSystem spec), Traced.TracedSystem.valid ts → a✝ = Traced.TracedSystem.to_system ts → ∃ ts', Traced.TracedSystem.to_system ts' = b✝ ∧ Traced.TracedSystem.valid ts'
inr.trans∀ (ts : Traced.TracedSystem spec), Traced.TracedSystem.valid ts → a✝ = Traced.TracedSystem.to_system ts → ∃ ts', Traced.TracedSystem.to_system ts' = c✝ ∧ Traced.TracedSystem.valid ts'Goals accomplished! 🐙spec: Spec
s: System spec
no_panics_yet: s.panics = 0
initial_valid: Spec.validate spec IsReservation.empty s.state
threads_valid: ∀ (t : Thread spec), t ∈ s.threads → Thread.valid tvalid s
inr.trans∀ (ts : Traced.TracedSystem spec), Traced.TracedSystem.valid ts → a✝ = Traced.TracedSystem.to_system ts → ∃ ts', Traced.TracedSystem.to_system ts' = c✝ ∧ Traced.TracedSystem.valid ts'
inr.trans∀ (ts : Traced.TracedSystem spec), Traced.TracedSystem.valid ts → a✝ = Traced.TracedSystem.to_system ts → ∃ ts', Traced.TracedSystem.to_system ts' = c✝ ∧ Traced.TracedSystem.valid ts'spec: Spec
s, s', a, b, c: System spec
IHab: ∀ (ts : Traced.TracedSystem spec), Traced.TracedSystem.valid ts → a = Traced.TracedSystem.to_system ts → ∃ ts', Traced.TracedSystem.to_system ts' = b ∧ Traced.TracedSystem.valid ts'
IHbc: ∀ (ts : Traced.TracedSystem spec), Traced.TracedSystem.valid ts → b = Traced.TracedSystem.to_system ts → ∃ ts', Traced.TracedSystem.to_system ts' = c ∧ Traced.TracedSystem.valid ts'
inr.trans∀ (ts : Traced.TracedSystem spec), Traced.TracedSystem.valid ts → a = Traced.TracedSystem.to_system ts → ∃ ts', Traced.TracedSystem.to_system ts' = c ∧ Traced.TracedSystem.valid ts'
inr.trans∀ (ts : Traced.TracedSystem spec), Traced.TracedSystem.valid ts → a✝ = Traced.TracedSystem.to_system ts → ∃ ts', Traced.TracedSystem.to_system ts' = c✝ ∧ Traced.TracedSystem.valid ts'spec: Spec
s, s', a, b, c: System spec
IHab: ∀ (ts : Traced.TracedSystem spec), Traced.TracedSystem.valid ts → a = Traced.TracedSystem.to_system ts → ∃ ts', Traced.TracedSystem.to_system ts' = b ∧ Traced.TracedSystem.valid ts'
IHbc: ∀ (ts : Traced.TracedSystem spec), Traced.TracedSystem.valid ts → b = Traced.TracedSystem.to_system ts → ∃ ts', Traced.TracedSystem.to_system ts' = c ∧ Traced.TracedSystem.valid ts'
ts_a: Traced.TracedSystem spec
ts_a_valid: Traced.TracedSystem.valid ts_a
ts_a_hyp: a = Traced.TracedSystem.to_system ts_a
inr.trans∃ ts', Traced.TracedSystem.to_system ts' = c ∧ Traced.TracedSystem.valid ts'
inr.trans∀ (ts : Traced.TracedSystem spec), Traced.TracedSystem.valid ts → a✝ = Traced.TracedSystem.to_system ts → ∃ ts', Traced.TracedSystem.to_system ts' = c✝ ∧ Traced.TracedSystem.valid ts'spec: Spec
s, s', a, b, c: System spec
IHab: ∀ (ts : Traced.TracedSystem spec), Traced.TracedSystem.valid ts → a = Traced.TracedSystem.to_system ts → ∃ ts', Traced.TracedSystem.to_system ts' = b ∧ Traced.TracedSystem.valid ts'
IHbc: ∀ (ts : Traced.TracedSystem spec), Traced.TracedSystem.valid ts → b = Traced.TracedSystem.to_system ts → ∃ ts', Traced.TracedSystem.to_system ts' = c ∧ Traced.TracedSystem.valid ts'
ts_a: Traced.TracedSystem spec
ts_a_valid: Traced.TracedSystem.valid ts_a
ts_a_hyp: a = Traced.TracedSystem.to_system ts_a
w✝: Traced.TracedSystem spec
inr.trans.intro∃ ts', Traced.TracedSystem.to_system ts' = c ∧ Traced.TracedSystem.valid ts'
inr.trans∀ (ts : Traced.TracedSystem spec), Traced.TracedSystem.valid ts → a✝ = Traced.TracedSystem.to_system ts → ∃ ts', Traced.TracedSystem.to_system ts' = c✝ ∧ Traced.TracedSystem.valid ts'spec: Spec
s, s', a, b, c: System spec
IHab: ∀ (ts : Traced.TracedSystem spec), Traced.TracedSystem.valid ts → a = Traced.TracedSystem.to_system ts → ∃ ts', Traced.TracedSystem.to_system ts' = b ∧ Traced.TracedSystem.valid ts'
IHbc: ∀ (ts : Traced.TracedSystem spec), Traced.TracedSystem.valid ts → b = Traced.TracedSystem.to_system ts → ∃ ts', Traced.TracedSystem.to_system ts' = c ∧ Traced.TracedSystem.valid ts'
ts_a: Traced.TracedSystem spec
ts_a_valid: Traced.TracedSystem.valid ts_a
ts_a_hyp: a = Traced.TracedSystem.to_system ts_a
ts_b: Traced.TracedSystem spec
ts_b_hyp: Traced.TracedSystem.to_system ts_b = b ∧ Traced.TracedSystem.valid ts_b
inr.trans.intro∃ ts', Traced.TracedSystem.to_system ts' = c ∧ Traced.TracedSystem.valid ts'
inr.trans∀ (ts : Traced.TracedSystem spec), Traced.TracedSystem.valid ts → a✝ = Traced.TracedSystem.to_system ts → ∃ ts', Traced.TracedSystem.to_system ts' = c✝ ∧ Traced.TracedSystem.valid ts'spec: Spec
s, s', a, b, c: System spec
IHab: ∀ (ts : Traced.TracedSystem spec), Traced.TracedSystem.valid ts → a = Traced.TracedSystem.to_system ts → ∃ ts', Traced.TracedSystem.to_system ts' = b ∧ Traced.TracedSystem.valid ts'
IHbc: ∀ (ts : Traced.TracedSystem spec), Traced.TracedSystem.valid ts → b = Traced.TracedSystem.to_system ts → ∃ ts', Traced.TracedSystem.to_system ts' = c ∧ Traced.TracedSystem.valid ts'
ts_a: Traced.TracedSystem spec
ts_a_valid: Traced.TracedSystem.valid ts_a
ts_a_hyp: a = Traced.TracedSystem.to_system ts_a
ts_b: Traced.TracedSystem spec
ts_b_hyp: Traced.TracedSystem.to_system ts_b = b ∧ Traced.TracedSystem.valid ts_b
inr.trans.intro.aspec: Spec
s, s', a, b, c: System spec
IHab: ∀ (ts : Traced.TracedSystem spec), Traced.TracedSystem.valid ts → a = Traced.TracedSystem.to_system ts → ∃ ts', Traced.TracedSystem.to_system ts' = b ∧ Traced.TracedSystem.valid ts'
IHbc: ∀ (ts : Traced.TracedSystem spec), Traced.TracedSystem.valid ts → b = Traced.TracedSystem.to_system ts → ∃ ts', Traced.TracedSystem.to_system ts' = c ∧ Traced.TracedSystem.valid ts'
ts_a: Traced.TracedSystem spec
ts_a_valid: Traced.TracedSystem.valid ts_a
ts_a_hyp: a = Traced.TracedSystem.to_system ts_a
ts_b: Traced.TracedSystem spec
ts_b_hyp: Traced.TracedSystem.to_system ts_b = b ∧ Traced.TracedSystem.valid ts_b
inr.trans.intro.ab = Traced.TracedSystem.to_system ts_b
inr.trans∀ (ts : Traced.TracedSystem spec), Traced.TracedSystem.valid ts → a✝ = Traced.TracedSystem.to_system ts → ∃ ts', Traced.TracedSystem.to_system ts' = c✝ ∧ Traced.TracedSystem.valid ts'spec: Spec
s, s', a, b, c: System spec
IHab: ∀ (ts : Traced.TracedSystem spec), Traced.TracedSystem.valid ts → a = Traced.TracedSystem.to_system ts → ∃ ts', Traced.TracedSystem.to_system ts' = b ∧ Traced.TracedSystem.valid ts'
IHbc: ∀ (ts : Traced.TracedSystem spec), Traced.TracedSystem.valid ts → b = Traced.TracedSystem.to_system ts → ∃ ts', Traced.TracedSystem.to_system ts' = c ∧ Traced.TracedSystem.valid ts'
ts_a: Traced.TracedSystem spec
ts_a_valid: Traced.TracedSystem.valid ts_a
ts_a_hyp: a = Traced.TracedSystem.to_system ts_a
ts_b: Traced.TracedSystem spec
ts_b_hyp: Traced.TracedSystem.to_system ts_b = b ∧ Traced.TracedSystem.valid ts_b
inr.trans.intro.aspec: Spec
s, s', a, b, c: System spec
IHab: ∀ (ts : Traced.TracedSystem spec), Traced.TracedSystem.valid ts → a = Traced.TracedSystem.to_system ts → ∃ ts', Traced.TracedSystem.to_system ts' = b ∧ Traced.TracedSystem.valid ts'
IHbc: ∀ (ts : Traced.TracedSystem spec), Traced.TracedSystem.valid ts → b = Traced.TracedSystem.to_system ts → ∃ ts', Traced.TracedSystem.to_system ts' = c ∧ Traced.TracedSystem.valid ts'
ts_a: Traced.TracedSystem spec
ts_a_valid: Traced.TracedSystem.valid ts_a
ts_a_hyp: a = Traced.TracedSystem.to_system ts_a
ts_b: Traced.TracedSystem spec
ts_b_hyp: Traced.TracedSystem.to_system ts_b = b ∧ Traced.TracedSystem.valid ts_b
inr.trans.intro.aspec: Spec
s, s', a, b, c: System spec
IHab: ∀ (ts : Traced.TracedSystem spec), Traced.TracedSystem.valid ts → a = Traced.TracedSystem.to_system ts → ∃ ts', Traced.TracedSystem.to_system ts' = b ∧ Traced.TracedSystem.valid ts'
IHbc: ∀ (ts : Traced.TracedSystem spec), Traced.TracedSystem.valid ts → b = Traced.TracedSystem.to_system ts → ∃ ts', Traced.TracedSystem.to_system ts' = c ∧ Traced.TracedSystem.valid ts'
ts_a: Traced.TracedSystem spec
ts_a_valid: Traced.TracedSystem.valid ts_a
ts_a_hyp: a = Traced.TracedSystem.to_system ts_a
ts_b: Traced.TracedSystem spec
ts_b_hyp: Traced.TracedSystem.to_system ts_b = b ∧ Traced.TracedSystem.valid ts_b
inr.trans.intro.ab = Traced.TracedSystem.to_system ts_bGoals accomplished! 🐙
inr.trans∀ (ts : Traced.TracedSystem spec), Traced.TracedSystem.valid ts → a✝ = Traced.TracedSystem.to_system ts → ∃ ts', Traced.TracedSystem.to_system ts' = c✝ ∧ Traced.TracedSystem.valid ts'spec: Spec
s, s', a, b, c: System spec
IHab: ∀ (ts : Traced.TracedSystem spec), Traced.TracedSystem.valid ts → a = Traced.TracedSystem.to_system ts → ∃ ts', Traced.TracedSystem.to_system ts' = b ∧ Traced.TracedSystem.valid ts'
IHbc: ∀ (ts : Traced.TracedSystem spec), Traced.TracedSystem.valid ts → b = Traced.TracedSystem.to_system ts → ∃ ts', Traced.TracedSystem.to_system ts' = c ∧ Traced.TracedSystem.valid ts'
ts_a: Traced.TracedSystem spec
ts_a_valid: Traced.TracedSystem.valid ts_a
ts_a_hyp: a = Traced.TracedSystem.to_system ts_a
ts_b: Traced.TracedSystem spec
ts_b_hyp: Traced.TracedSystem.to_system ts_b = b ∧ Traced.TracedSystem.valid ts_b
inr.trans.intro.ab = Traced.TracedSystem.to_system ts_bspec: Spec
s, s', a, b, c: System spec
IHab: ∀ (ts : Traced.TracedSystem spec), Traced.TracedSystem.valid ts → a = Traced.TracedSystem.to_system ts → ∃ ts', Traced.TracedSystem.to_system ts' = b ∧ Traced.TracedSystem.valid ts'
IHbc: ∀ (ts : Traced.TracedSystem spec), Traced.TracedSystem.valid ts → b = Traced.TracedSystem.to_system ts → ∃ ts', Traced.TracedSystem.to_system ts' = c ∧ Traced.TracedSystem.valid ts'
ts_a: Traced.TracedSystem spec
ts_a_valid: Traced.TracedSystem.valid ts_a
ts_a_hyp: a = Traced.TracedSystem.to_system ts_a
ts_b: Traced.TracedSystem spec
ts_b_hyp: Traced.TracedSystem.to_system ts_b = b ∧ Traced.TracedSystem.valid ts_b
inr.trans.intro.ab = Traced.TracedSystem.to_system ts_bend Mt.SystemGoals accomplished! 🐙