@[reducible, inline]
Equations
- DY.ReachabilityConfig.make step = { Input := α, PreCond := fun (x : α) (x_1 : DY.ExecTrace) => True, step := fun (x : α) => ⟨β, step x⟩ }
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
class
DY.ReachabilityConfig.HasStep
[ExecTraceTypes]
(config1 : ReachabilityConfig)
(config2 : semiOutParam ReachabilityConfig)
:
Instances
Instances
@[instance_reducible]
instance
DY.instReachabilityConfigHasItself
[ExecTraceTypes]
(config : ReachabilityConfig)
:
config.Has config
Equations
- DY.instReachabilityConfigHasItself config = { inj := fun (x : config.Input) => x, pf_pre := ⋯, pf_step := ⋯ }
@[instance_reducible]
instance
DY.instReachabilityConfigHasStep
[ExecTraceTypes]
(config1 config2 config3 : ReachabilityConfig)
[inst12 : config1.HasStep config2]
[inst23 : config2.Has config3]
:
config1.Has config3
Equations
- DY.instReachabilityConfigHasStep config1 config2 config3 = { inj := fun (x : config1.Input) => DY.ReachabilityConfig.Has.inj (DY.ReachabilityConfig.HasStep.inj x), pf_pre := ⋯, pf_step := ⋯ }
@[instance_reducible]
instance
DY.instReachabilityConfigCombineHasStep
[ExecTraceTypes]
{α : Type}
(configs : α → ReachabilityConfig)
(id : α)
:
(configs id).HasStep (ReachabilityConfig.combine configs)
- Base [ExecTraceTypes] {config : ReachabilityConfig} : Reachable config nil
- Step [ExecTraceTypes] {config : ReachabilityConfig} {tr : ExecTrace} (input : config.Input) : config.PreCond input tr → Reachable config tr → Reachable config ((config.step input).snd.run tr).snd.val
Instances For
def
DY.Traceful.PreservesReachabilityFrom
[ExecTraceTypes]
{a : Type}
(config : ReachabilityConfig)
(f : Traceful a)
(post : a → ExecTrace → Prop)
(tr : ExecTrace)
:
Equations
- One or more equations did not get rendered due to their size.
Instances For
def
DY.Traceful.PreservesReachability
[ExecTraceTypes]
{a : Type}
(config : ReachabilityConfig)
(f : Traceful a)
(pre : ExecTrace → Prop)
(post : a → ExecTrace → Prop)
:
Equations
- DY.Traceful.PreservesReachability config f pre post = ∀ (tr : DY.ExecTrace), DY.Trace.Reachable config tr → pre tr → DY.Traceful.PreservesReachabilityFrom config f post tr
Instances For
theorem
DY.Traceful.PreservesReachabilityFrom_bind
[ExecTraceTypes]
{a b : Type}
(config : ReachabilityConfig)
(x : Traceful a)
(f : a → Traceful b)
(postF : b → ExecTrace → Prop)
(preX : ExecTrace → Prop)
(postX : a → ExecTrace → Prop)
(tr : ExecTrace)
(h_x : PreservesReachability config x preX postX)
(h_tr_reachable : Trace.Reachable config tr)
(h_pre_x : preX tr)
(h_f :
∀ (x' : a) (trMid : ExecTrace),
postX x' trMid → Trace.Reachable config trMid → tr ≤ trMid → PreservesReachabilityFrom config (f x') postF trMid)
:
PreservesReachabilityFrom config (x >>= f) postF tr
theorem
DY.Traceful.PreservesReachability_base
[ExecTraceTypes]
(subConfig config : ReachabilityConfig)
[subConfig.Has config]
(input : subConfig.Input)
:
theorem
DY.Traceful.PreservesReachabilityFrom_pure
[ExecTraceTypes]
{α : Type}
(config : ReachabilityConfig)
(x : α)
(tr : ExecTrace)
(post : α → ExecTrace → Prop)
:
Trace.Reachable config tr → post x tr → PreservesReachabilityFrom config (pure x) post tr
theorem
DY.Traceful.PreservesReachability_to_Reachable
[ExecTraceTypes]
{a : Type}
{config : ReachabilityConfig}
{f : Traceful a}
{pre : ExecTrace → Prop}
{post : a → ExecTrace → Prop}
(h : PreservesReachability config f pre post)
: