pub struct Action<State, Input, Output> {
pub precondition: FnSpec<(Input, State), bool>,
pub transition: FnSpec<(Input, State), (State, Output)>,
}Fields§
§precondition: FnSpec<(Input, State), bool>§transition: FnSpec<(Input, State), (State, Output)>Implementations§
Source§impl<State, Input, Output> Action<State, Input, Output>
impl<State, Input, Output> Action<State, Input, Output>
Sourcepub open spec fn pre(self, input: Input) -> StatePred<State>
pub open spec fn pre(self, input: Input) -> StatePred<State>
{ StatePred::new(|s: State| (self.precondition)(input, s)) }Sourcepub open spec fn forward(self, input: Input) -> ActionPred<State>
pub open spec fn forward(self, input: Input) -> ActionPred<State>
{
ActionPred::new(|s: State, s_prime: State| {
&&& (self.precondition)(input, s)
&&& s_prime == (self.transition)(input, s).0
})
}Sourcepub open spec fn weak_fairness(self, input: Input) -> TempPred<State>
pub open spec fn weak_fairness(self, input: Input) -> TempPred<State>
{ always(lift_state(self.pre(input))).leads_to(lift_action(self.forward(input))) }Sourcepub proof fn wf1(
self,
input: Input,
spec: TempPred<State>,
next: ActionPred<State>,
pre: StatePred<State>,
post: StatePred<State>,
)
pub proof fn wf1( self, input: Input, spec: TempPred<State>, next: ActionPred<State>, pre: StatePred<State>, post: StatePred<State>, )
requires
forall |s, s_prime: State| {
pre.apply(s) && #[trigger] next.apply(s, s_prime)
==> pre.apply(s_prime) || post.apply(s_prime)
},forall |s, s_prime: State| {
pre.apply(s) && #[trigger] next.apply(s, s_prime)
&& self.forward(input).apply(s, s_prime) ==> post.apply(s_prime)
},spec.entails(always(lift_action(next))),spec.entails(always(lift_state(pre).implies(lift_state(self.pre(input))))),spec.entails(self.weak_fairness(input)),ensuresspec.entails(lift_state(pre).leads_to(lift_state(post))),Sourcepub proof fn lemma_statisfy_pre_implies_enabled(self, input: Input, state: State)
pub proof fn lemma_statisfy_pre_implies_enabled(self, input: Input, state: State)
requires
self.pre(input).apply(state),ensuresenabled(self.forward(input)).apply(state),Auto Trait Implementations§
impl<State, Input, Output> Freeze for Action<State, Input, Output>
impl<State, Input, Output> RefUnwindSafe for Action<State, Input, Output>
impl<State, Input, Output> Send for Action<State, Input, Output>
impl<State, Input, Output> Sync for Action<State, Input, Output>
impl<State, Input, Output> Unpin for Action<State, Input, Output>
impl<State, Input, Output> UnwindSafe for Action<State, Input, Output>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more