]> matita.cs.unibo.it Git - helm.git/blobdiff - matita/matita/contribs/lambdadelta/static_2/syntax/sd_d.ma
partial update in static_2
[helm.git] / matita / matita / contribs / lambdadelta / static_2 / syntax / sd_d.ma
index 7c6f680e84f750f72900f7af7983691fb1b56761..10620b0bf19f96e8393fd81af2fdef640a708daa 100644 (file)
@@ -12,6 +12,8 @@
 (*                                                                        *)
 (**************************************************************************)
 
+include "ground/generated/pull_2.ma".
+include "ground/arith/pnat_pred.ma".
 include "static_2/syntax/sh_props.ma".
 include "static_2/syntax/sd.ma".
 
@@ -36,13 +38,16 @@ lemma deg_SO_inv_succ (h) (s) (s0):
       โˆ€n. deg_SO h s s0 (โ†‘n) โ†’ โ‡ก*[h,n]s0 = s.
 /2 width=3 by deg_SO_inv_succ_aux/ qed-.
 
-lemma deg_SO_refl (h) (s): deg_SO h s s ๐Ÿ.
+lemma deg_SO_refl (h) (s):
+      deg_SO h s s ๐Ÿ.
 #h #s @(deg_SO_succ โ€ฆ ๐ŸŽ ?) //
 qed.
 
-definition sd_SO (h) (s): sd โ‰ mk_sd (deg_SO h s).
+definition sd_SO (h) (s):
+           sd โ‰ mk_sd (deg_SO h s).
 
-lemma sd_SO_props (h) (s): sh_decidable h โ†’ sh_acyclic h โ†’
+lemma sd_SO_props (h) (s):
+      sh_decidable h โ†’ sh_acyclic h โ†’
       sd_props h (sd_SO h s).
 #h #s #Hhd #Hha
 @mk_sd_props
@@ -61,26 +66,31 @@ lemma sd_SO_props (h) (s): sh_decidable h โ†’ sh_acyclic h โ†’
 | #s0 #d *
   [ #n #H destruct
     <npred_succ @(nat_ind_succ โ€ฆ n) -n
-    [ @deg_SO_zero #n >(sh_nexts_succ_next h n s0) #H 
-      lapply (sh_nexts_inj โ€ฆ Hha ???) -H #H destruct
-    | #n @deg_SO_succ >sh_nexts_swap //
+    [ @deg_SO_zero #n >sh_nexts_succ_next #H
+      lapply (sh_nexts_inj โ€ฆ Hha โ€ฆ H) -H #H
+      elim (eq_inv_nsucc_zero โ€ฆ H)
+    | #n #_ /2 width=1 by deg_SO_succ/
     ]
-  | #H0 @deg_SO_zero #n >sh_nexts_swap #H destruct
+  | #H0 @deg_SO_zero #n >sh_nexts_succ_next #H destruct
     /2 width=2 by/
   ]
 ]
 qed.
 
-rec definition sd_d (h:?) (s:?) (d:?) on d: sd โ‰
-   match d with
-   [ O   โ‡’ sd_O
-   | S d โ‡’ match d with
-           [ O โ‡’ sd_SO h s
-           | _ โ‡’ sd_d h (pr_next h s) d
-           ]
-   ].
+rec definition sd_d_pnat (h) (s) (d) on d: sd โ‰
+match d with
+[ punit   โ‡’ sd_SO h s
+| psucc d โ‡’ sd_d_pnat h (โ‡ก[h]s) d
+].
 
-lemma sd_d_props (h) (s) (d): sh_decidable h โ†’ sh_acyclic h โ†’
+definition sd_d (h) (s) (d): sd โ‰
+match d with
+[ nzero  โ‡’ sd_O
+| ninj d โ‡’ sd_d_pnat h s d
+].
+
+lemma sd_d_props (h) (s) (d):
+      sh_decidable h โ†’ sh_acyclic h โ†’
       sd_props h (sd_d h s d).
 #h @pull_2 * [ // ]
 #d elim d -d /2 width=1 by sd_SO_props/
@@ -89,11 +99,17 @@ qed.
 (* Properties with sd_d *****************************************************)
 
 lemma sd_d_SS (h):
-      รข\88\80s,d. sd_d h s (รข\86\91รข\86\91d) = sd_d h (รขยซยฏ[h]s) (โ†‘d).
+      รข\88\80s,d. sd_d h s (รข\86\91รข\86\91d) = sd_d h (รข\87ยก[h]s) (โ†‘d).
 // qed.
 
-lemma sd_d_correct (h): sh_decidable h โ†’ sh_acyclic h โ†’
+lemma sd_d_correct (h):
+      sh_decidable h โ†’ sh_acyclic h โ†’
       โˆ€s,d. deg (sd_d h s d) s d.
-#h #Hhd #Hha @pull_2 #d elim d -d [ // ]
-#d elim d -d /3 width=3 by deg_inv_pred, sd_d_props/
+#h #Hhd #Hha @pull_2 * [ // ]
+#d elim d -d [ // ] #d #IH #s
+>(npsucc_pred d) in โŠข (???%);
+@(deg_inv_pred h)
+[ /2 width=1 by sd_d_props/
+| <nsucc_pnpred //
+]
 qed.