RIS.aeq_facts: lemmas about ฮฑ-equivalence and the equivalence transducer.
Set Implicit Arguments.
Require Export transducer subword.
Section s.
Context {atom X: Set}{๐ : Atom atom} {๐ : Alphabet ๐ X}.
Global Instance subword_filter (A : Set) (f : A โ bool) :
Proper (subword ==> subword) (filter f).
Lemma subword_incl (A : Set) (u v : list A) : u โ v โ u โ v.
Global Instance subword_map (A B: Set) (f: AโB) :
Proper (subword ==> subword) (map f).
Global Instance subword_app (A: Set) :
Proper (subword ==> subword ==> subword) (@app A).
Lemma absent_subword s a b s' : s โ s' โ absent s' a b โ absent s a b.
Lemma subword_dec_app (A:Set) (u v w :list A) : u โ v++w โ โ u1 u2, u = u1++u2 โง u1 โ v โง u2 โ w.
Lemma stack_binding_subword u v s1 s2 :
(s1 โฃ u | v โค s2) โ
โ s3 s4, s2 = s3++s4 โง s4 โ s1
โง (โ a, nb a (prj1 s4) = nb a (prj1 s1) - d_binding (๐ a u)
โง nb a (prj1 s3) = c_binding (๐ a u)
โง nb a (prj2 s4) = nb a (prj2 s1) - d_binding (๐ a v)
โง nb a (prj2 s3) = c_binding (๐ a v)
โง d_binding (๐ a u) - nb a (prj1 s1) = d_binding (๐ a v) - nb a (prj2 s1)).
Lemma exists_var_binding u a n :
๐ a u = (0,true,n) โ โ u1 u2 x, u = u1++var x::u2 โง a #ฮฑ u1 โง a โ โxโ.
Lemma decompose_app (A:Set) (u1 u2 v : list A) :
โขu1++u2โฅ = โขvโฅ โ โ v1 v2, โขu1โฅ = โขv1โฅ โง v = v1++v2.
Lemma scope_binding u a n :
๐ a u = (0,false,S n) โ โ u1 u2, u = u1++open a::u2 โง a #ฮฑ u1 โง a โ u2.
Lemma path_init_pair u v a b s :
a โ b โ ([(a,b)] โฃ u | v โค s) โ
(a โ u โง b โ v โง โ s', s = s'++[(a,b)])
โจ (โ u1 u2 v1 v2,
u = u1++close a::u2
โง v = v1++close b::v2
โง a โ u1
โง b โ v1
โง โขu1โฅ = โขv1โฅ
โง โ n, ๐ b u1 = (0,false,n)).
Lemma path_init_refl_pair u v s c :
([(c,c)] โฃ u | v โค s) โ
[] โฃ u | v โค s โจ (โ s', s = s'++[(c,c)] โง [] โฃ u | v โค s').
Lemma find_matching_close a u n :
n < d_binding (๐ a u) โ โ u1 u2, u = u1++close a::u2 โง d_binding (๐ a u1) = n โง a โท u1.
Lemma subword_not_In (A:Set)(x:A) l m n : l โ(m++x::n) โ ยฌ x โ l โ l โ m++n.
Lemma aeq_first_letter_open u v a b :
aโ b โ open a::u โก open b::v โ
โ u1 u2, u = u1++close a::u2
โง a โ u1
โง ((b #ฮฑ u1 โง [(a,b)]โu1++close b::u2 โก v)
โจ โ w1 w2 w3 w4, u1 = w1 ++ open b::w2
โง u2 = w3 ++ close b::w4
โง b #ฮฑ w1
โง b โ (w2++w3)
โง โ c, c # u โ
[(a,b)]โw1++open c::[(a,b);(b,c)]โw2
++close b::[(b,c)]โw3++close c::w4 โก v).
Lemma aeq_first_letter u v l m :
l::u โก m::v โ (l=m โง u โก v) โจ (โ a b, aโ b โง l=open a โง m=open b).
End s.
Require Export transducer subword.
Section s.
Context {atom X: Set}{๐ : Atom atom} {๐ : Alphabet ๐ X}.
Global Instance subword_filter (A : Set) (f : A โ bool) :
Proper (subword ==> subword) (filter f).
Lemma subword_incl (A : Set) (u v : list A) : u โ v โ u โ v.
Global Instance subword_map (A B: Set) (f: AโB) :
Proper (subword ==> subword) (map f).
Global Instance subword_app (A: Set) :
Proper (subword ==> subword ==> subword) (@app A).
Lemma absent_subword s a b s' : s โ s' โ absent s' a b โ absent s a b.
Lemma subword_dec_app (A:Set) (u v w :list A) : u โ v++w โ โ u1 u2, u = u1++u2 โง u1 โ v โง u2 โ w.
Lemma stack_binding_subword u v s1 s2 :
(s1 โฃ u | v โค s2) โ
โ s3 s4, s2 = s3++s4 โง s4 โ s1
โง (โ a, nb a (prj1 s4) = nb a (prj1 s1) - d_binding (๐ a u)
โง nb a (prj1 s3) = c_binding (๐ a u)
โง nb a (prj2 s4) = nb a (prj2 s1) - d_binding (๐ a v)
โง nb a (prj2 s3) = c_binding (๐ a v)
โง d_binding (๐ a u) - nb a (prj1 s1) = d_binding (๐ a v) - nb a (prj2 s1)).
Lemma exists_var_binding u a n :
๐ a u = (0,true,n) โ โ u1 u2 x, u = u1++var x::u2 โง a #ฮฑ u1 โง a โ โxโ.
Lemma decompose_app (A:Set) (u1 u2 v : list A) :
โขu1++u2โฅ = โขvโฅ โ โ v1 v2, โขu1โฅ = โขv1โฅ โง v = v1++v2.
Lemma scope_binding u a n :
๐ a u = (0,false,S n) โ โ u1 u2, u = u1++open a::u2 โง a #ฮฑ u1 โง a โ u2.
Lemma path_init_pair u v a b s :
a โ b โ ([(a,b)] โฃ u | v โค s) โ
(a โ u โง b โ v โง โ s', s = s'++[(a,b)])
โจ (โ u1 u2 v1 v2,
u = u1++close a::u2
โง v = v1++close b::v2
โง a โ u1
โง b โ v1
โง โขu1โฅ = โขv1โฅ
โง โ n, ๐ b u1 = (0,false,n)).
Lemma path_init_refl_pair u v s c :
([(c,c)] โฃ u | v โค s) โ
[] โฃ u | v โค s โจ (โ s', s = s'++[(c,c)] โง [] โฃ u | v โค s').
Lemma find_matching_close a u n :
n < d_binding (๐ a u) โ โ u1 u2, u = u1++close a::u2 โง d_binding (๐ a u1) = n โง a โท u1.
Lemma subword_not_In (A:Set)(x:A) l m n : l โ(m++x::n) โ ยฌ x โ l โ l โ m++n.
Lemma aeq_first_letter_open u v a b :
aโ b โ open a::u โก open b::v โ
โ u1 u2, u = u1++close a::u2
โง a โ u1
โง ((b #ฮฑ u1 โง [(a,b)]โu1++close b::u2 โก v)
โจ โ w1 w2 w3 w4, u1 = w1 ++ open b::w2
โง u2 = w3 ++ close b::w4
โง b #ฮฑ w1
โง b โ (w2++w3)
โง โ c, c # u โ
[(a,b)]โw1++open c::[(a,b);(b,c)]โw2
++close b::[(b,c)]โw3++close c::w4 โก v).
Lemma aeq_first_letter u v l m :
l::u โก m::v โ (l=m โง u โก v) โจ (โ a b, aโ b โง l=open a โง m=open b).
End s.