X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=matita%2Fmatita%2Flib%2Fre%2Fre.ma;fp=matita%2Fmatita%2Flib%2Fre%2Fre.ma;h=7031e6d62e082c084440a40476f939bf009e5dc6;hb=537a73f4aca66ef57108a51cd9cc61b478571f33;hp=c37b47348b4f91a94afa7f983fe70dc82f4cff9b;hpb=9490a4ae2615e23c9ab4b6dc13ef6c699ce33120;p=helm.git diff --git a/matita/matita/lib/re/re.ma b/matita/matita/lib/re/re.ma index c37b47348..7031e6d62 100644 --- a/matita/matita/lib/re/re.ma +++ b/matita/matita/lib/re/re.ma @@ -52,8 +52,7 @@ let rec flatten (S : DeqSet) (l : list (word S)) on l : word S ≝ match l with [ nil ⇒ [ ] | cons w tl ⇒ w @ flatten ? tl ]. let rec conjunct (S : DeqSet) (l : list (word S)) (r : word S → Prop) on l: Prop ≝ -match l with [ nil ⇒ ? | cons w tl ⇒ r w ∧ conjunct ? tl r ]. -// qed. +match l with [ nil ⇒ True | cons w tl ⇒ r w ∧ conjunct ? tl r ]. (* definition empty_lang ≝ λS.λw:word S.False. @@ -406,11 +405,17 @@ lemma erase_bull : ∀S.∀i:pitem S. |\fst (•i)| = |i|. ] qed. -axiom cat_ext_l: ∀S.∀A,B,C:word S →Prop. +lemma cat_ext_l: ∀S.∀A,B,C:word S →Prop. A =1 C → A · B =1 C · B. +#S #A #B #C #H #w % * #w1 * #w2 * * #eqw #inw1 #inw2 +cases (H w1) /6/ +qed. -axiom cat_ext_r: ∀S.∀A,B,C:word S →Prop. +lemma cat_ext_r: ∀S.∀A,B,C:word S →Prop. B =1 C → A · B =1 A · C. +#S #A #B #C #H #w % * #w1 * #w2 * * #eqw #inw1 #inw2 +cases (H w2) /6/ +qed. lemma distr_cat_r: ∀S.∀A,B,C:word S →Prop. (A ∪ B) · C =1 A · C ∪ B · C. @@ -418,9 +423,41 @@ lemma distr_cat_r: ∀S.∀A,B,C:word S →Prop. [* #w1 * #w2 * * #eqw * /6/ |* * #w1 * #w2 * * /6/] qed. -axiom fix_star: ∀S.∀A:word S → Prop. +(* +lemma fix_star_aux: ∀S.∀A:word S → Prop.∀w1,w2. + A w1 → A^* w2 → A^* (w1@w2). +#S #A #w1 #w2 #Aw1 * #l * #H #H1 +@(ex_intro *) + +lemma fix_star: ∀S.∀A:word S → Prop. A^* =1 A · A^* ∪ { [ ] }. - +#S #A #w % + [* #l generalize in match w; -w cases l [normalize #w * /2/] + #w1 #tl #w * whd in ⊢ ((??%?)→?); #eqw whd in ⊢ (%→?); * + #w1A #cw1 %1 @(ex_intro … w1) @(ex_intro … (flatten S tl)) + % /2/ whd @(ex_intro … tl) /2/ + |* [2: normalize #eqw H #_ + @(ex_intro … (nil ?)) /2/ + |#a #w1 #Hind * + [#w2 whd in ⊢ ((???%)→?); #eqw2