]> matita.cs.unibo.it Git - helm.git/blobdiff - matita/matita/contribs/lambdadelta/basic_2/grammar/lenv_length.ma
another file was missing :(
[helm.git] / matita / matita / contribs / lambdadelta / basic_2 / grammar / lenv_length.ma
index 7c31b59e75152f196c6730615846affee229983b..a7a99ba015b8ed5fcaec9c8fa7a1d41af3ca0510 100644 (file)
@@ -16,37 +16,43 @@ include "basic_2/grammar/lenv.ma".
 
 (* LENGTH OF A LOCAL ENVIRONMENT ********************************************)
 
-let rec length L ≝ match L with
+rec definition length L ≝ match L with
 [ LAtom       ⇒ 0
-| LPair L _ _ ⇒ length L + 1
+| LPair L _ _ ⇒ ⫯(length L)
 ].
 
 interpretation "length (local environment)" 'card L = (length L).
 
+(* Basic properties *********************************************************)
+
+lemma length_atom: |⋆| = 0.
+// qed.
+
+lemma length_pair: ∀I,L,V. |L.ⓑ{I}V| = ⫯|L|.
+// qed.
+
 (* Basic inversion lemmas ***************************************************)
 
 lemma length_inv_zero_dx: ∀L. |L| = 0 → L = ⋆.
-* // #L #I #V normalize <plus_n_Sm #H destruct
+* // #L #I #V >length_pair
+#H destruct
 qed-.
 
 lemma length_inv_zero_sn: ∀L. 0 = |L| → L = ⋆.
-* // #L #I #V normalize <plus_n_Sm #H destruct
-qed-.
+/2 width=1 by length_inv_zero_dx/ qed-.
 
-lemma length_inv_pos_dx: ∀l,L. |L| = l + 1 →
-                         ∃∃I,K,V. |K| = l & L = K. ⓑ{I}V.
-#l *
-[ normalize <plus_n_Sm #H destruct
-| #K #I #V #H
-  lapply (injective_plus_l … H) -H /2 width=5 by ex2_3_intro/
-]
+(* Basic_2A1: was: length_inv_pos_dx *)
+lemma length_inv_succ_dx: ∀n,L. |L| = ⫯n →
+                          ∃∃I,K,V. |K| = n & L = K. ⓑ{I}V.
+#n * /3 width=5 by injective_S, ex2_3_intro/
+>length_atom #H destruct
 qed-.
 
-lemma length_inv_pos_sn: ∀l,L. l + 1 = |L| →
-                         ∃∃I,K,V. l = |K| & L = K. ⓑ{I}V.
-#l *
-[ normalize <plus_n_Sm #H destruct
-| #K #I #V #H
-  lapply (injective_plus_l … H) -H /2 width=5 by ex2_3_intro/
-]
+(* Basic_2A1: was: length_inv_pos_sn *)
+lemma length_inv_succ_sn: ∀n,L. ⫯n = |L| →
+                          ∃∃I,K,V. n = |K| & L = K. ⓑ{I}V.
+#l #L #H lapply (sym_eq ??? H) -H 
+#H elim (length_inv_succ_dx … H) -H /2 width=5 by ex2_3_intro/
 qed-.
+
+(* Basic_2A1: removed theorems 1: length_inj *)