]> matita.cs.unibo.it Git - helm.git/commitdiff
fixing
authorAndrea Asperti <andrea.asperti@unibo.it>
Thu, 4 Dec 2014 09:17:11 +0000 (09:17 +0000)
committerAndrea Asperti <andrea.asperti@unibo.it>
Thu, 4 Dec 2014 09:17:11 +0000 (09:17 +0000)
matita/matita/lib/tutorial/chapter6.ma
matita/matita/lib/tutorial/chapter9.ma

index fff418d4d33d100c0056be8909ea3440f11228cf..258152d43d204a3a62806027381f31e2047f052d 100644 (file)
@@ -89,6 +89,41 @@ lemma eqP_union_l: ∀U.∀A,B,C:U →Prop.
   B ≐ C  → A ∪ B ≐ A ∪ C.
 #U #A #B #C #eqBC #a @iff_or_l @eqBC qed.
 
+lemma eqP_substract_r: ∀U.∀A,B,C:U →Prop. 
+  A ≐ C  → A - B ≐ C - B.
+#U #A #B #C #eqAB #a @iff_and_r @eqAB qed.
+  
+lemma eqP_substract_l: ∀U.∀A,B,C:U →Prop. 
+  B ≐ C  → A - B ≐ A - C.
+#U #A #B #C #eqBC #a @iff_and_l /2/ qed.
+
+(* set equalities *)
+lemma union_empty_r: ∀U.∀A:U→Prop. 
+  A ∪ ∅ ≐ A.
+#U #A #w % [* // normalize #abs @False_ind /2/ | /2/]
+qed.
+
+lemma union_comm : ∀U.∀A,B:U →Prop. 
+  A ∪ B ≐ B ∪ A.
+#U #A #B #a % * /2/ qed. 
+
+lemma union_assoc: ∀U.∀A,B,C:U → Prop. 
+  A ∪ B ∪ C ≐ A ∪ (B ∪ C).
+#S #A #B #C #w % [* [* /3/ | /3/] | * [/3/ | * /3/]
+qed.  
+
+(*distributivities *)
+
+lemma distribute_intersect : ∀U.∀A,B,C:U→Prop. 
+  (A ∪ B) ∩ C ≐ (A ∩ C) ∪ (B ∩ C).
+#U #A #B #C #w % [* * /3/ | * * /3/] 
+qed.
+  
+lemma distribute_substract : ∀U.∀A,B,C:U→Prop. 
+  (A ∪ B) - C ≐ (A - C) ∪ (B - C).
+#U #A #B #C #w % [* * /3/ | * * /3/] 
+qed.
+
 (************************ Sets with decidable equality ************************)
 
 (* We say that a property P:A → Prop over a datatype A is decidable when we have 
index 1a0ee720b0bde459d6114a3e46715e5812b4bd0c..0c44f2720a1ba57ff3dabe51594a4f0a425e4570 100644 (file)
@@ -49,21 +49,21 @@ Let us come to the formalized definitions:
 *)
 
 definition pre_concat_r ≝ λS:DeqSet.λi:pitem S.λe:pre S.
-  match e with [ mk_Prod i1 b ⇒ 〈i · i1, b〉].
+  match e with [ pair i1 b ⇒ 〈i · i1, b〉].
  
 notation "i ◃ e" left associative with precedence 60 for @{'lhd $i $e}.
 interpretation "pre_concat_r" 'lhd i e = (pre_concat_r ? i e).
 
 lemma eq_to_ex_eq: ∀S.∀A,B:word S → Prop. 
-  A = B → A =1 B. 
+  A = B → A  B. 
 #S #A #B #H >H #x % // qed.
 
-(* The behaviour of ◃ is summarized by the following, easy lemma: *)
+(* The behaoviour of ◃ is summarized by the following, easy lemma: *)
 
 lemma sem_pre_concat_r : ∀S,i.∀e:pre S.
-  \sem{i ◃ e} =1 \sem{i} · \sem{|fst \dots e|} ∪ \sem{e}.
+  \sem{i ◃ e} \doteq \sem{i} · \sem{|fst \dots e|} ∪ \sem{e}.
 #S #i * #i1 #b1 cases b1 [2: @eq_to_ex_eq //] 
->sem_pre_true >sem_cat >sem_pre_true /2
+>sem_pre_true >sem_cat >sem_pre_true whd in match (fst ???); /
 qed.
  
 (* The definition of $•(-)$ (eclose) and ▹ (pre_concat_l) are mutually recursive.
@@ -74,7 +74,7 @@ pres. *)
 
 definition pre_concat_l ≝ λS:DeqSet.λbcast:∀S:DeqSet.pitem S → pre S.λe1:pre S.λi2:pitem S.
   match e1 with 
-  [ mk_Prod i1 b1 ⇒ match b1 with 
+  [ pair i1 b1 ⇒ match b1 with 
     [ true ⇒ (i1 ◃ (bcast ? i2)) 
     | false ⇒ 〈i1 · i2,false〉
     ]
@@ -131,7 +131,7 @@ in the obvious way. *)
 
 definition lift ≝ λS.λf:pitem S →pre S.λe:pre S. 
   match e with 
-  [ mk_Prod i b ⇒ 〈fst \dots (f i), snd \dots (f i) ∨ b〉].
+  [ pair i b ⇒ 〈fst \dots (f i), snd \dots (f i) ∨ b〉].
   
 definition preclose ≝ λS. lift S (eclose S). 
 interpretation "preclose" 'eclose x = (preclose ? x).
@@ -158,7 +158,7 @@ sem_bullet     \sem{•i} =1 \sem{i} ∪ \sem{|i|}
 The proof of sem_oplus is straightforward. *)
 
 lemma sem_oplus: ∀S:DeqSet.∀e1,e2:pre S.
-  \sem{e1 ⊕ e2} =1 \sem{e1} ∪ \sem{e2}. 
+  \sem{e1 ⊕ e2}  \sem{e1} ∪ \sem{e2}. 
 #S * #i1 #b1 * #i2 #b2 #w %
   [cases b1 cases b2 normalize /2/ * /3/ * /3/
   |cases b1 cases b2 normalize /2/ * /3/ * /3/
@@ -180,8 +180,8 @@ lemma LcatE : ∀S.∀e1,e2:pitem S.
 // qed.
 
 lemma sem_pcl_aux : ∀S.∀e1:pre S.∀i2:pitem S.
-   \sem{•i2} =1  \sem{i2} ∪ \sem{|i2|} →
-   \sem{e1 ▹ i2} =1  \sem{e1} · \sem{|i2|} ∪ \sem{i2}.
+   \sem{•i2}  \sem{i2} ∪ \sem{|i2|} →
+   \sem{e1 ▹ i2}  \sem{e1} · \sem{|i2|} ∪ \sem{i2}.
 #S * #i1 #b1 #i2 cases b1
   [2:#th >pcl_false >sem_pre_false >sem_pre_false >sem_cat /2/
   |#H >pcl_true >sem_pre_true @(eqP_trans … (sem_pre_concat_r …))
@@ -192,7 +192,7 @@ lemma sem_pcl_aux : ∀S.∀e1:pre S.∀i2:pitem S.
 qed.
   
 lemma minus_eps_pre_aux: ∀S.∀e:pre S.∀i:pitem S.∀A. 
- \sem{e} =1 \sem{i} ∪ A → \sem{fst \dots e} =1 \sem{i} ∪ (A - {[ ]}).
+ \sem{e} ≐ \sem{i} ∪ A → \sem{fst \dots e} ≐ \sem{i} ∪ (A - {[ ]}).
 #S #e #i #A #seme
 @eqP_trans [|@minus_eps_pre]
 @eqP_trans [||@eqP_union_r [|@eqP_sym @minus_eps_item]]
@@ -200,7 +200,7 @@ lemma minus_eps_pre_aux: ∀S.∀e:pre S.∀i:pitem S.∀A.
 @eqP_substract_r //
 qed.
 
-theorem sem_bull: ∀S:DeqSet. ∀i:pitem S.  \sem{•i} =1 \sem{i} ∪ \sem{|i|}.
+theorem sem_bull: ∀S:DeqSet. ∀i:pitem S.  \sem{•i}  \sem{i} ∪ \sem{|i|}.
 #S #e elim e 
   [#w normalize % [/2/ | * //]
   |/2/ 
@@ -253,7 +253,7 @@ lemma forget_blank: ∀S.∀e:re S.|blank S e| = e.
 #S #e elim e normalize //
 qed.
 
-lemma sem_blank: ∀S.∀e:re S.\sem{blank S e} =1 ∅.
+lemma sem_blank: ∀S.∀e:re S.\sem{blank S e}  ∅.
 #S #e elim e 
   [1,2:@eq_to_ex_eq // 
   |#s @eq_to_ex_eq //
@@ -270,7 +270,7 @@ lemma sem_blank: ∀S.∀e:re S.\sem{blank S e} =1 ∅.
 qed.
    
 theorem re_embedding: ∀S.∀e:re S. 
-  \sem{•(blank S e)} =1 \sem{e}.
+  \sem{•(blank S e)}  \sem{e}.
 #S #e @eqP_trans [|@sem_bull] >forget_blank 
 @eqP_trans [|@eqP_union_r [|@sem_blank]]
 @eqP_trans [|@union_comm] @union_empty_r.
@@ -302,14 +302,15 @@ qed.
   
 lemma erase_odot:∀S.∀e1,e2:pre S.
   |fst \dots (e1 ⊙ e2)| = |fst \dots e1| · (|fst \dots e2|).
-#S * #i1 * * #i2 #b2 // >odot_true_b >erase_dot //  
+#S * #i1 * * #i2 #b2 // >odot_true_b >erase_dot 
+whd in match (fst ???) in ⊢ (???%); whd in match (fst ???) in ⊢ (???%);//  
 qed.
 
 (* Let us come to the star operation: *)
 
 definition lk ≝ λS:DeqSet.λe:pre S.
   match e with 
-  [ mk_Prod i1 b1 ⇒
+  [ pair i1 b1 ⇒
     match b1 with 
     [true ⇒ 〈(fst \dots (eclose ? i1))^*, true〉
     |false ⇒ 〈i1^*,false〉
@@ -330,15 +331,15 @@ lemma ostar_false: ∀S.∀i:pitem S.
   
 lemma erase_ostar: ∀S.∀e:pre S.
   |fst \dots (e^⊛)| = |fst \dots e|^*.
-#S * #i * // qed.
+#S * #i * whd in match (fst ???) in ⊢ (???%); // qed.
 
 lemma sem_odot_true: ∀S:DeqSet.∀e1:pre S.∀i. 
-  \sem{e1 ⊙ 〈i,true〉} =1 \sem{e1 ▹ i} ∪ { [ ] }.
+  \sem{e1 ⊙ 〈i,true〉}  \sem{e1 ▹ i} ∪ { [ ] }.
 #S #e1 #i 
 cut (e1 ⊙ 〈i,true〉 = 〈fst \dots (e1 ▹ i), snd \dots(e1 ▹ i) ∨ true〉) [//]
 #H >H cases (e1 ▹ i) #i1 #b1 cases b1 
   [>sem_pre_true @eqP_trans [||@eqP_sym @union_assoc]
-   @eqP_union_l /2/ 
+   @eqP_union_l #w normalize % [/2/|* //] 
   |/2/
   ]
 qed.
@@ -354,7 +355,7 @@ qed.
 of ⊙ and ⊛. *)
 
 lemma sem_odot: 
-  ∀S.∀e1,e2: pre S. \sem{e1 ⊙ e2} =1 \sem{e1}· \sem{|fst \dots e2|} ∪ \sem{e2}.
+  ∀S.∀e1,e2: pre S. \sem{e1 ⊙ e2}  \sem{e1}· \sem{|fst \dots e2|} ∪ \sem{e2}.
 #S #e1 * #i2 * 
   [>sem_pre_true 
    @eqP_trans [|@sem_odot_true]
@@ -364,7 +365,7 @@ lemma sem_odot:
 qed.
 
 theorem sem_ostar: ∀S.∀e:pre S. 
-  \sem{e^⊛} =1  \sem{e} · \sem{|fst \dots e|}^*.
+  \sem{e^⊛}   \sem{e} · \sem{|fst \dots e|}^*.
 #S * #i #b cases b
   [>sem_pre_true >sem_pre_true >sem_star >erase_bull
    @eqP_trans [|@eqP_union_r[|@cat_ext_l [|@minus_eps_pre_aux //]]]