// ************************************************************************** // // // // eses eses // // eses eses // // eses eseses esesese eses Embedded Systems Group // // ese ese ese ese ese // // ese eseseses eseseses ese Department of Computer Science // // eses eses ese eses // // eses eseses eseseses eses University of Kaiserslautern // // eses eses // // // // ************************************************************************** // // This is a generic version of the ABRO example. The module wait on the // // signals a[0u..EVENTS-1u] and emits the output o as soon as the last of // // the signals a[i] arrives. After that, an occurrence of signal r is awaited // // to restart the behavior. // // ************************************************************************** // macro Events = 4; module ABRO1(event [Events]bool ?a,event ?r, !o) { loop abort { for(i=0 .. (Events-1)) do || await(a[i]); emit(o); await(r); } when(r); } satisfies { S1 : assert A G (o -> exists(i=0 .. (Events-1)) a[i]); S2 : assert A G (o -> forall(i=0 .. (Events-1)) [a[i] PWB r]); S3 : assert A G (o -> A X !o); }