vsphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget3/translations/zh_CN/trace/rv/deterministic_automatamodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget3/translations/zh_TW/trace/rv/deterministic_automatamodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget3/translations/it_IT/trace/rv/deterministic_automatamodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget3/translations/ja_JP/trace/rv/deterministic_automatamodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget3/translations/ko_KR/trace/rv/deterministic_automatamodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget3/translations/sp_SP/trace/rv/deterministic_automatamodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhsection)}(hhh](htitle)}(hDeterministic Automatah]hDeterministic Automata}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhM/var/lib/git/docbuild/linux/Documentation/trace/rv/deterministic_automata.rsthKubh paragraph)}(hMFormally, a deterministic automaton, denoted by G, is defined as a quintuple:h]hMFormally, a deterministic automaton, denoted by G, is defined as a quintuple:}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh block_quote)}(h>*G* = { *X*, *E*, *f*, x\ :subscript:`0`, X\ :subscript:`m` } h]h)}(h=*G* = { *X*, *E*, *f*, x\ :subscript:`0`, X\ :subscript:`m` }h](hemphasis)}(h*G*h]hG}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhubh = { }(hhhhhNhNubh)}(h*X*h]hX}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhubh, }(hhhhhNhNubh)}(h*E*h]hE}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhubh, }hhsbh)}(h*f*h]hf}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhubh, x }(hhhhhNhNubh subscript)}(h:subscript:`0`h]h0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhubh, X }(hhhhhNhNubj)}(h:subscript:`m`h]hm}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhubh }}(hhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhhubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hwhere:h]hwhere:}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh bullet_list)}(hhh](h list_item)}(h*X* is the set of states;h]h)}(hjdh](h)}(h*X*h]hX}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfubh is the set of states;}(hjfhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK hjbubah}(h]h ]h"]h$]h&]uh1j`hj]hhhhhNubja)}(h *E* is the finite set of events;h]h)}(hjh](h)}(h*E*h]hE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh is the finite set of events;}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK hjubah}(h]h ]h"]h$]h&]uh1j`hj]hhhhhNubja)}(h'x\ :subscript:`0` is the initial state;h]h)}(hjh](hx }(hjhhhNhNubj)}(h:subscript:`0`h]h0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is the initial state;}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK hjubah}(h]h ]h"]h$]h&]uh1j`hj]hhhhhNubja)}(hIX\ :subscript:`m` (subset of *X*) is the set of marked (or final) states.h]h)}(hjh](hX }(hjhhhNhNubj)}(h:subscript:`m`h]hm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh (subset of }(hjhhhNhNubh)}(h*X*h]hX}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh)) is the set of marked (or final) states.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK hjubah}(h]h ]h"]h$]h&]uh1j`hj]hhhhhNubja)}(hX*f* : *X* x *E* -> *X* $ is the transition function. It defines the state transition in the occurrence of an event from *E* in the state *X*. In the special case of deterministic automata, the occurrence of the event in *E* in a state in *X* has a deterministic next state from *X*. h]h)}(hX*f* : *X* x *E* -> *X* $ is the transition function. It defines the state transition in the occurrence of an event from *E* in the state *X*. In the special case of deterministic automata, the occurrence of the event in *E* in a state in *X* has a deterministic next state from *X*.h](h)}(h*f*h]hf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh : }(hjhhhNhNubh)}(h*X*h]hX}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh x }(hjhhhNhNubh)}(h*E*h]hE}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh -> }(hjhhhNhNubh)}(h*X*h]hX}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubhb $ is the transition function. It defines the state transition in the occurrence of an event from }(hjhhhNhNubh)}(h*E*h]hE}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh in the state }(hjhhhNhNubh)}(h*X*h]hX}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubhP. In the special case of deterministic automata, the occurrence of the event in }(hjhhhNhNubh)}(h*E*h]hE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh in a state in }(hjhhhNhNubh)}(h*X*h]hX}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh% has a deterministic next state from }(hjhhhNhNubh)}(h*X*h]hX}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j`hj]hhhhhNubeh}(h]h ]h"]h$]h&]bullet-uh1j[hhhK hhhhubh)}(hTFor example, a given automaton named 'wip' (wakeup in preemptive) can be defined as:h]hXFor example, a given automaton named ‘wip’ (wakeup in preemptive) can be defined as:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubj\)}(hhh](ja)}(h+*X* = { ``preemptive``, ``non_preemptive``}h]h)}(hjh](h)}(h*X*h]hX}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh = { }(hjhhhNhNubhliteral)}(h``preemptive``h]h preemptive}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, }(hjhhhNhNubj)}(h``non_preemptive``h]hnon_preemptive}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh}}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j`hjhhhhhNubja)}(hB*E* = { ``preempt_enable``, ``preempt_disable``, ``sched_waking``}h]h)}(hj,h](h)}(h*E*h]hE}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.ubh = { }(hj.hhhNhNubj)}(h``preempt_enable``h]hpreempt_enable}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubh, }(hj.hhhNhNubj)}(h``preempt_disable``h]hpreempt_disable}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubh, }hj.sbj)}(h``sched_waking``h]h sched_waking}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubh}}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj*ubah}(h]h ]h"]h$]h&]uh1j`hjhhhhhNubja)}(h"x\ :subscript:`0` = ``preemptive``h]h)}(hjh](hx }(hjhhhNhNubj)}(h:subscript:`0`h]h0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh = }(hjhhhNhNubj)}(h``preemptive``h]h preemptive}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j`hjhhhhhNubja)}(h$X\ :subscript:`m` = {``preemptive``}h]h)}(hjh](hX }(hjhhhNhNubj)}(h:subscript:`m`h]hm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh = {}(hjhhhNhNubj)}(h``preemptive``h]h preemptive}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh}}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j`hjhhhhhNubja)}(h*f* = - *f*\ (``preemptive``, ``preempt_disable``) = ``non_preemptive`` - *f*\ (``non_preemptive``, ``sched_waking``) = ``non_preemptive`` - *f*\ (``non_preemptive``, ``preempt_enable``) = ``preemptive`` h]hdefinition_list)}(hhh]hdefinition_list_item)}(h*f* = - *f*\ (``preemptive``, ``preempt_disable``) = ``non_preemptive`` - *f*\ (``non_preemptive``, ``sched_waking``) = ``non_preemptive`` - *f*\ (``non_preemptive``, ``preempt_enable``) = ``preemptive`` h](hterm)}(h*f* =h](h)}(h*f*h]hf}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh =}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKhjubh definition)}(hhh]j\)}(hhh](ja)}(h?*f*\ (``preemptive``, ``preempt_disable``) = ``non_preemptive``h]h)}(hj.h](h)}(h*f*h]hf}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0ubh (}(hj0hhhNhNubj)}(h``preemptive``h]h preemptive}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubh, }(hj0hhhNhNubj)}(h``preempt_disable``h]hpreempt_disable}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubh) = }(hj0hhhNhNubj)}(h``non_preemptive``h]hnon_preemptive}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1hhhhKhj,ubah}(h]h ]h"]h$]h&]uh1j`hj)ubja)}(h@*f*\ (``non_preemptive``, ``sched_waking``) = ``non_preemptive``h]h)}(hjh](h)}(h*f*h]hf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh (}(hjhhhNhNubj)}(h``non_preemptive``h]hnon_preemptive}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, }(hjhhhNhNubj)}(h``sched_waking``h]h sched_waking}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) = }(hjhhhNhNubj)}(h``non_preemptive``h]hnon_preemptive}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j`hj)ubja)}(h?*f*\ (``non_preemptive``, ``preempt_enable``) = ``preemptive`` h]h)}(h>*f*\ (``non_preemptive``, ``preempt_enable``) = ``preemptive``h](h)}(h*f*h]hf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh (}(hjhhhNhNubj)}(h``non_preemptive``h]hnon_preemptive}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, }(hjhhhNhNubj)}(h``preempt_enable``h]hpreempt_enable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) = }(hjhhhNhNubj)}(h``preemptive``h]h preemptive}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j`hj)ubeh}(h]h ]h"]h$]h&]jjuh1j[hhhKhj&ubah}(h]h ]h"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]uh1jhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j`hjhhhNhNubeh}(h]h ]h"]h$]h&]jjuh1j[hhhKhhhhubh)}(hXOne of the benefits of this formal definition is that it can be presented in multiple formats. For example, using a *graphical representation*, using vertices (nodes) and edges, which is very intuitive for *operating system* practitioners, without any loss.h](htOne of the benefits of this formal definition is that it can be presented in multiple formats. For example, using a }(hjVhhhNhNubh)}(h*graphical representation*h]hgraphical representation}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVubh@, using vertices (nodes) and edges, which is very intuitive for }(hjVhhhNhNubh)}(h*operating system*h]hoperating system}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVubh! practitioners, without any loss.}(hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(h9The previous 'wip' automaton can also be represented as::h]h H preemptive H -----------------> | non_preemptive | #============# +------------------+ ^ | | sched_waking | +--------------+h]hX preempt_enable +---------------------------------+ v | #============# preempt_disable +------------------+ --> H preemptive H -----------------> | non_preemptive | #============# +------------------+ ^ | | sched_waking | +--------------+}hjsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1jhhhK&hhhhubh)}(hhh](h)}(hDeterministic Automaton in Ch]hDeterministic Automaton in C}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK1ubh)}(hIn the paper "Efficient formal verification for the Linux kernel", the authors present a simple way to represent an automaton in C that can be used as regular code in the Linux kernel.h]hIn the paper “Efficient formal verification for the Linux kernel”, the authors present a simple way to represent an automaton in C that can be used as regular code in the Linux kernel.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK3hjhhubh)}(hOFor example, the 'wip' automata can be presented as (augmented with comments)::h]hRFor example, the ‘wip’ automata can be presented as (augmented with comments):}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK7hjhhubj)}(hX/* enum representation of X (set of states) to be used as index */ enum states { preemptive = 0, non_preemptive, state_max }; #define INVALID_STATE state_max /* enum representation of E (set of events) to be used as index */ enum events { preempt_disable = 0, preempt_enable, sched_waking, event_max }; struct automaton { char *state_names[state_max]; // X: the set of states char *event_names[event_max]; // E: the finite set of events unsigned char function[state_max][event_max]; // f: transition function unsigned char initial_state; // x_0: the initial state bool final_states[state_max]; // X_m: the set of marked states }; struct automaton aut = { .state_names = { "preemptive", "non_preemptive" }, .event_names = { "preempt_disable", "preempt_enable", "sched_waking" }, .function = { { non_preemptive, INVALID_STATE, INVALID_STATE }, { INVALID_STATE, preemptive, non_preemptive }, }, .initial_state = preemptive, .final_states = { 1, 0 }, };h]hX/* enum representation of X (set of states) to be used as index */ enum states { preemptive = 0, non_preemptive, state_max }; #define INVALID_STATE state_max /* enum representation of E (set of events) to be used as index */ enum events { preempt_disable = 0, preempt_enable, sched_waking, event_max }; struct automaton { char *state_names[state_max]; // X: the set of states char *event_names[event_max]; // E: the finite set of events unsigned char function[state_max][event_max]; // f: transition function unsigned char initial_state; // x_0: the initial state bool final_states[state_max]; // X_m: the set of marked states }; struct automaton aut = { .state_names = { "preemptive", "non_preemptive" }, .event_names = { "preempt_disable", "preempt_enable", "sched_waking" }, .function = { { non_preemptive, INVALID_STATE, INVALID_STATE }, { INVALID_STATE, preemptive, non_preemptive }, }, .initial_state = preemptive, .final_states = { 1, 0 }, };}hjsbah}(h]h ]h"]h$]h&]jjuh1jhhhK9hjhhubh)}(hThe *transition function* is represented as a matrix of states (lines) and events (columns), and so the function *f* : *X* x *E* -> *X* can be solved in O(1). For example::h](hThe }(hjhhhNhNubh)}(h*transition function*h]htransition function}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubhX is represented as a matrix of states (lines) and events (columns), and so the function }(hjhhhNhNubh)}(h*f*h]hf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh : }(hjhhhNhNubh)}(h*X*h]hX}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh x }(hjhhhNhNubh)}(h*E*h]hE}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh -> }(hjhhhNhNubh)}(h*X*h]hX}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh$ can be solved in O(1). For example:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKdhjhhubj)}(h7next_state = automaton_wip.function[curr_state][event];h]h7next_state = automaton_wip.function[curr_state][event];}hjKsbah}(h]h ]h"]h$]h&]jjuh1jhhhKhhjhhubeh}(h]deterministic-automaton-in-cah ]h"]deterministic automaton in cah$]h&]uh1hhhhhhhhK1ubh)}(hhh](h)}(hGraphviz .dot formath]hGraphviz .dot format}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjahhhhhKkubh)}(hThe Graphviz open-source tool can produce the graphical representation of an automaton using the (textual) DOT language as the source code. The DOT format is widely used and can be converted to many other formats.h]hThe Graphviz open-source tool can produce the graphical representation of an automaton using the (textual) DOT language as the source code. The DOT format is widely used and can be converted to many other formats.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKmhjahhubh)}(h-For example, this is the 'wip' model in DOT::h]h0For example, this is the ‘wip’ model in DOT:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKqhjahhubj)}(hXdigraph state_automaton { {node [shape = circle] "non_preemptive"}; {node [shape = plaintext, style=invis, label=""] "__init_preemptive"}; {node [shape = doublecircle] "preemptive"}; {node [shape = circle] "preemptive"}; "__init_preemptive" -> "preemptive"; "non_preemptive" [label = "non_preemptive"]; "non_preemptive" -> "non_preemptive" [ label = "sched_waking" ]; "non_preemptive" -> "preemptive" [ label = "preempt_enable" ]; "preemptive" [label = "preemptive"]; "preemptive" -> "non_preemptive" [ label = "preempt_disable" ]; { rank = min ; "__init_preemptive"; "preemptive"; } }h]hXdigraph state_automaton { {node [shape = circle] "non_preemptive"}; {node [shape = plaintext, style=invis, label=""] "__init_preemptive"}; {node [shape = doublecircle] "preemptive"}; {node [shape = circle] "preemptive"}; "__init_preemptive" -> "preemptive"; "non_preemptive" [label = "non_preemptive"]; "non_preemptive" -> "non_preemptive" [ label = "sched_waking" ]; "non_preemptive" -> "preemptive" [ label = "preempt_enable" ]; "preemptive" [label = "preemptive"]; "preemptive" -> "non_preemptive" [ label = "preempt_disable" ]; { rank = min ; "__init_preemptive"; "preemptive"; } }}hjsbah}(h]h ]h"]h$]h&]jjuh1jhhhKshjahhubh)}(hThis DOT format can be transformed into a bitmap or vectorial image using the dot utility, or into an ASCII art using graph-easy. For instance::h]hThis DOT format can be transformed into a bitmap or vectorial image using the dot utility, or into an ASCII art using graph-easy. For instance:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjahhubj)}(h=$ dot -Tsvg -o wip.svg wip.dot $ graph-easy wip.dot > wip.txth]h=$ dot -Tsvg -o wip.svg wip.dot $ graph-easy wip.dot > wip.txt}hjsbah}(h]h ]h"]h$]h&]jjuh1jhhhKhjahhubeh}(h]graphviz-dot-formatah ]h"]graphviz .dot formatah$]h&]uh1hhhhhhhhKkubh)}(hhh](h)}(hdot2ch]hdot2c}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hdot2c is a utility that can parse a .dot file containing an automaton as in the example above and automatically convert it to the C representation presented in [3].h]hdot2c is a utility that can parse a .dot file containing an automaton as in the example above and automatically convert it to the C representation presented in [3].}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hFor example, having the previous 'wip' model into a file named 'wip.dot', the following command will transform the .dot file into the C representation (previously shown) in the 'wip.h' file::h]hFor example, having the previous ‘wip’ model into a file named ‘wip.dot’, the following command will transform the .dot file into the C representation (previously shown) in the ‘wip.h’ file:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj)}(h$ dot2c wip.dot > wip.hh]h$ dot2c wip.dot > wip.h}hjsbah}(h]h ]h"]h$]h&]jjuh1jhhhKhjhhubh)}(hQThe 'wip.h' content is the code sample in section 'Deterministic Automaton in C'.h]hYThe ‘wip.h’ content is the code sample in section ‘Deterministic Automaton in C’.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]dot2cah ]h"]dot2cah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hRemarksh]hRemarks}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hThe automata formalism allows modeling discrete event systems (DES) in multiple formats, suitable for different applications/users.h]hThe automata formalism allows modeling discrete event systems (DES) in multiple formats, suitable for different applications/users.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hFor example, the formal description using set theory is better suitable for automata operations, while the graphical format for human interpretation; and computer languages for machine execution.h]hFor example, the formal description using set theory is better suitable for automata operations, while the graphical format for human interpretation; and computer languages for machine execution.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]remarksah ]h"]remarksah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h Referencesh]h References}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFhhhhhKubh)}(hGMany textbooks cover automata formalism. For a brief introduction see::h]hFMany textbooks cover automata formalism. For a brief introduction see:}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjFhhubj)}(hMO'Regan, Gerard. Concise guide to software engineering. Springer, Cham, 2017.h]hMO'Regan, Gerard. Concise guide to software engineering. Springer, Cham, 2017.}hjesbah}(h]h ]h"]h$]h&]jjuh1jhhhKhjFhhubh)}(hhFor a detailed description, including operations, and application on Discrete Event Systems (DES), see::h]hgFor a detailed description, including operations, and application on Discrete Event Systems (DES), see:}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjFhhubj)}(h|Cassandras, Christos G., and Stephane Lafortune, eds. Introduction to discrete event systems. Boston, MA: Springer US, 2008.h]h|Cassandras, Christos G., and Stephane Lafortune, eds. Introduction to discrete event systems. Boston, MA: Springer US, 2008.}hjsbah}(h]h ]h"]h$]h&]jjuh1jhhhKhjFhhubh)}(h)For the C representation in kernel, see::h]h(For the C representation in kernel, see:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjFhhubj)}(hDe Oliveira, Daniel Bristot; Cucinotta, Tommaso; De Oliveira, Romulo Silva. Efficient formal verification for the Linux kernel. In: International Conference on Software Engineering and Formal Methods. Springer, Cham, 2019. p. 315-332.h]hDe Oliveira, Daniel Bristot; Cucinotta, Tommaso; De Oliveira, Romulo Silva. Efficient formal verification for the Linux kernel. In: International Conference on Software Engineering and Formal Methods. Springer, Cham, 2019. p. 315-332.}hjsbah}(h]h ]h"]h$]h&]jjuh1jhhhKhjFhhubeh}(h] referencesah ]h"] referencesah$]h&]uh1hhhhhhhhKubeh}(h]deterministic-automataah ]h"]deterministic automataah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(jjj^j[jjjj jCj@jju nametypes}(jj^jjjCjuh}(jhj[jjjaj jj@jjjFu footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]transform_messages] transformerN include_log] decorationNhhub.