]> matita.cs.unibo.it Git - helm.git/blobdiff - matita/matita/contribs/lambdadelta/delayed_updating/syntax/path_head.ma
update in delayed updating
[helm.git] / matita / matita / contribs / lambdadelta / delayed_updating / syntax / path_head.ma
index 9cdfe620ff67088da01fa37b512b41f1fa3e9e65..438c5e6a72eca2320049f0b0ba8bb8a5e4109ba1 100644 (file)
@@ -74,6 +74,11 @@ lemma path_head_S_sn (p) (n):
 
 (* Basic inversions *********************************************************)
 
+lemma eq_inv_path_head_zero_dx (q) (p):
+      q = ↳[𝟎]p → 𝐞 = q.
+#q * //
+qed-.
+
 lemma eq_inv_path_empty_head (p) (n):
       (𝐞) = ↳[n]p → 𝟎 = n.
 *
@@ -88,3 +93,42 @@ lemma eq_inv_path_empty_head (p) (n):
   ] #H0 destruct
 ]
 qed-.
+
+(* Constructions with list_append *******************************************)
+
+lemma path_head_refl_append (p) (q) (n):
+      q = ↳[n]q → q = ↳[n](q●p).
+#p #q elim q -q
+[ #n #Hn <(eq_inv_path_empty_head … Hn) -Hn //
+| #l #q #IH #n @(nat_ind_succ … n) -n
+  [ #Hq | #n #_ cases l [ #m ] ]
+  [ lapply (eq_inv_path_head_zero_dx … Hq) -Hq #Hq destruct
+  | <path_head_d_sn <path_head_d_sn
+  | <path_head_m_sn <path_head_m_sn
+  | <path_head_L_sn <path_head_L_sn
+  | <path_head_A_sn <path_head_A_sn
+  | <path_head_S_sn <path_head_S_sn
+  ] #Hq
+  elim (eq_inv_list_lcons_bi ????? Hq) -Hq #_ #Hq
+  /3 width=1 by eq_f/
+]
+qed-.
+
+(* Inversions with list_append **********************************************)
+
+lemma eq_inv_path_head_refl_append (p) (q) (n):
+      q = ↳[n](q●p) → q = ↳[n]q.
+#p #q elim q -q
+[ #n #Hn <(eq_inv_path_empty_head … Hn) -p //
+| #l #q #IH #n @(nat_ind_succ … n) -n //
+  #n #_ cases l [ #m ]
+  [ <path_head_d_sn <path_head_d_sn
+  | <path_head_m_sn <path_head_m_sn
+  | <path_head_L_sn <path_head_L_sn
+  | <path_head_A_sn <path_head_A_sn
+  | <path_head_S_sn <path_head_S_sn
+  ] #Hq
+  elim (eq_inv_list_lcons_bi ????? Hq) -Hq #_ #Hq
+  /3 width=1 by eq_f/
+]
+qed-.