RIS.closed_automaton: computing an automaton for the ฮฑ-closure of an expression.
Set Implicit Arguments.
Require Import tools algebra language regexp automata systems.
Require Import aeq_facts alpha_regexp closed_languages binding_finite.
Section s.
Context {atom : Set}{๐ : Atom atom}.
Context {X : Set} {๐ : Alphabet ๐ X}.
Notation Regexp := (@regexp letter).
Definition bounded_stack A B n : list stack :=
flat_map (lists_of_length (pairs A B)) (seq 0 (S n)).
Definition state_space e A :=
pairs (bounded_stack โeโ A (2รsizeExpr e)) (stateSpace e).
Definition transitions_from A (state : stack ร Regexp) l :=
match (state,l) with
| (s,e,open a) โ flat_map (fun f โ map (fun b โ ((s,e),open b,((a,b)::s,f))) A) (ฮดA (open a) e)
| (s,e,close a) โ if (pairedb s a (image s a)) && (inb (image s a) A) then
map (fun f โ ((s,e),close (image s a),(sโ(a,image s a),f))) (ฮดA (close a) e)
else []
| (s,e,var x) โ
match var_perm' โxโ s with
| None โ []
| Some p โ
if inclb โpโxโ A
then map (fun f โ ((s,e),var (pโx),(s,f))) (ฮดA (var x) e)
else []
end
end.
Lemma transitions_from_spec A f s e l s1 s2 e1 e2 l' :
(s,e)โ state_space f A โ
((s1,e1),l',(s2,e2)) โ transitions_from A (s,e) l โ
(s1 = s โง e1 = e โง โl'โ โ A โง e2 โ ฮดA l e โง s โฃ l | l' โฆ s2) .
Definition closed_automaton (e : Regexp) (A : list atom) : NFA (stackรRegexp) letter :=
(filter (fun st โ (prj1 (fst st) =?= prj2 (fst st)) && ฯต (snd st) =?= e_un)(state_space e A),
flat_map (fun st โ flat_map (transitions_from A st) (Var e)) (state_space e A)).
Lemma path_support u v s1 s2 : s1 โฃ u | v โค s2 โ prj1 s2 โ prj1 s1 ++ โuโ
โง prj2 s2 โ prj2 s1 ++ โvโ.
Require Import tools algebra language regexp automata systems.
Require Import aeq_facts alpha_regexp closed_languages binding_finite.
Section s.
Context {atom : Set}{๐ : Atom atom}.
Context {X : Set} {๐ : Alphabet ๐ X}.
Notation Regexp := (@regexp letter).
Definition bounded_stack A B n : list stack :=
flat_map (lists_of_length (pairs A B)) (seq 0 (S n)).
Definition state_space e A :=
pairs (bounded_stack โeโ A (2รsizeExpr e)) (stateSpace e).
Definition transitions_from A (state : stack ร Regexp) l :=
match (state,l) with
| (s,e,open a) โ flat_map (fun f โ map (fun b โ ((s,e),open b,((a,b)::s,f))) A) (ฮดA (open a) e)
| (s,e,close a) โ if (pairedb s a (image s a)) && (inb (image s a) A) then
map (fun f โ ((s,e),close (image s a),(sโ(a,image s a),f))) (ฮดA (close a) e)
else []
| (s,e,var x) โ
match var_perm' โxโ s with
| None โ []
| Some p โ
if inclb โpโxโ A
then map (fun f โ ((s,e),var (pโx),(s,f))) (ฮดA (var x) e)
else []
end
end.
Lemma transitions_from_spec A f s e l s1 s2 e1 e2 l' :
(s,e)โ state_space f A โ
((s1,e1),l',(s2,e2)) โ transitions_from A (s,e) l โ
(s1 = s โง e1 = e โง โl'โ โ A โง e2 โ ฮดA l e โง s โฃ l | l' โฆ s2) .
Definition closed_automaton (e : Regexp) (A : list atom) : NFA (stackรRegexp) letter :=
(filter (fun st โ (prj1 (fst st) =?= prj2 (fst st)) && ฯต (snd st) =?= e_un)(state_space e A),
flat_map (fun st โ flat_map (transitions_from A st) (Var e)) (state_space e A)).
Lemma path_support u v s1 s2 : s1 โฃ u | v โค s2 โ prj1 s2 โ prj1 s1 ++ โuโ
โง prj2 s2 โ prj2 s1 ++ โvโ.
We have built an automaton whose language is the set of words
u such that โuโ โ A and there is a word v โ โฆeโง such that
vโกu.