// qed.
(*** minus_SO_dx *)
-lemma nminus_one_dx (m): ām = m - š .
+lemma nminus_unit_dx (m): ām = m - š .
// qed.
(*** eq_minus_S_pred *)
// qed.
(*** plus_SO_dx *)
-lemma nplus_one_dx (n): ān = n + š.
+lemma nplus_unit_dx (n): ān = n + š.
// qed.
(*** plus_n_Sm *)
(* Helper constructions *****************************************************)
(*** plus_SO_sn *)
-lemma nplus_one_sn (n): ān = š + n.
+lemma nplus_unit_sn (n): ān = š + n.
#n <nplus_comm // qed.
lemma nplus_succ_shift (m) (n): ām + n = m + ān.
lemma npred_inj (p): āp = ā(ninj p).
// qed.
-lemma npred_one: š = āš.
+lemma npred_unit: š = āš.
// qed.
lemma npred_psucc (p): ninj p = āāp.
lemma npred_pnat_inv_refl (p): ninj p = āp ā ā„.
*
-[ <npred_one #H destruct
+[ <npred_unit #H destruct
| #p /3 width=2 by psucc_inv_refl, eq_inv_ninj_bi/
]
qed-.
(* Basic constructions ******************************************************)
-lemma pplus_one_dx (p): āp = p + š.
+lemma pplus_unit_dx (p): āp = p + š.
// qed.
lemma pplus_succ_dx (p) (q): ā(p+q) = p + āq.
#p #q @(piter_appl ā¦ psucc)
qed.
-lemma pplus_one_sn (p): āp = š + p.
+lemma pplus_unit_sn (p): āp = š + p.
#p elim p -p //
qed.
lemma eq_inv_unit_pplus (p) (q): š = p + q ā ā„.
#p #q elim q -q
-[ <pplus_one_dx #H destruct
+[ <pplus_unit_dx #H destruct
| #q #_ <pplus_succ_dx #H destruct
]
qed-.
qed.
(*** yminus_SO2 *)
-lemma ylminus_one_dx (x): āx = x - (š).
+lemma ylminus_unit_dx (x): āx = x - (š).
// qed.
(*** yminus_Y_inj *)
(* Constructions with ysucc *************************************************)
(*** yplus_SO2 *)
-lemma yplus_one_dx (x): āx = x + š.
+lemma yplus_unit_dx (x): āx = x + š.
// qed.
(*** yplus_S2 yplus_succ2 *)
/2 width=1 by rtc_ism_plus/ qed.
lemma rtc_ism_succ (n) (c): šāŖn,cā« ā šāŖān,c+ššā«.
-#n #c #H >nplus_one_dx
+#n #c #H >nplus_unit_dx
/2 width=1 by rtc_ism_plus/
qed.
/2 width=1 by rtc_ist_plus/ qed.
lemma rtc_ist_succ (n) (c): šāŖn,cā« ā šāŖān,c+ššā«.
-#n #c #H >nplus_one_dx
+#n #c #H >nplus_unit_dx
/2 width=1 by rtc_ist_plus/
qed.
elim (rtc_ist_inv_plus ā¦ H) -H #n1 #n2 #Hn1 #Hn2 #H destruct //
qed-.
-lemma rtc_ist_inv_plus_one_dx:
+lemma rtc_ist_inv_plus_unit_dx:
ān,c1,c2. šāŖn,c1 + c2ā« ā šāŖš,c2ā« ā
āām. šāŖm,c1ā« & n = ām.
#n #c1 #c2 #H #H2 destruct
qed-.
(*** after_at1_fwd *)
-lemma gr_after_pat_sn_des:
+lemma gr_after_des_ist_pat:
āf1,i1,i2. @āŖi1, f1ā« ā i2 ā āf2. šāŖf2ā« ā āf. f2 ā f1 ā f ā
āāi. @āŖi2, f2ā« ā i & @āŖi1, fā« ā i.
#f1 #i1 #i2 #Hf1 #f2 #Hf2 #f #Hf elim (Hf2 i2) -Hf2
(* Forward lemmas on istot and isid **************************************************)
(*** after_fwd_isid_sn *)
-lemma gr_after_des_isi_sn:
+lemma gr_after_des_ist_eq_sn:
āf2,f1,f. šāŖfā« ā f2 ā f1 ā f ā f1 ā” f ā šāŖf2ā«.
#f2 #f1 #f #H #Hf elim (gr_after_inv_ist ā¦ Hf H) -H
#Hf2 #Hf1 #H @gr_isi_pat_total // -Hf2
qed-.
(*** after_fwd_isid_dx *)
-lemma gr_after_des_isi_dx:
+lemma gr_after_des_ist_eq_dx:
āf2,f1,f. šāŖfā« ā f2 ā f1 ā f ā f2 ā” f ā šāŖf1ā«.
#f2 #f1 #f #H #Hf elim (gr_after_inv_ist ā¦ Hf H) -H
#Hf2 #Hf1 #H2 @gr_isi_pat_total // -Hf1
-#i1 #i2 #Hi12 elim (gr_after_pat_sn_des ā¦ Hi12 ā¦ Hf) -f1
+#i1 #i2 #Hi12 elim (gr_after_des_ist_pat ā¦ Hi12 ā¦ Hf) -f1
/3 width=8 by gr_pat_inj, gr_pat_eq_repl_back/
qed-.
+++ /dev/null
-(**************************************************************************)
-(* ___ *)
-(* ||M|| *)
-(* ||A|| A project by Andrea Asperti *)
-(* ||T|| *)
-(* ||I|| Developers: *)
-(* ||T|| The HELM team. *)
-(* ||A|| http://helm.cs.unibo.it *)
-(* \ / *)
-(* \ / This file is distributed under the terms of the *)
-(* v GNU General Public License Version 2 *)
-(* *)
-(**************************************************************************)
-
-include "ground/relocation/gr_tls.ma".
-include "ground/relocation/gr_nat.ma".
-include "ground/relocation/gr_isi_uni.ma".
-include "ground/relocation/gr_after_isi.ma".
-
-(* RELATIONAL COMPOSITION FOR GENERIC RELOCATION MAPS ***********************************************************)
-
-(* Properties with gr_nat and uni *)
-
-(*** after_uni_dx *)
-lemma gr_after_uni_dx (l2) (l1):
- āf2. @āāŖl1, f2ā« ā l2 ā
- āf. f2 ā š®āØl1ā© ā f ā š®āØl2ā© ā ā«±*[l2] f2 ā f.
-#l2 @(nat_ind_succ ā¦ l2) -l2
-[ #l1 #f2 #Hf2 #f #Hf
- elim (gr_nat_inv_zero_dx ā¦ Hf2) -Hf2 // #g2 #H1 #H2 destruct
- lapply (gr_after_isi_inv_dx ā¦ Hf ?) -Hf
- /3 width=3 by gr_after_isi_sn, gr_after_eq_repl_back/
-| #l2 #IH #l1 #f2 #Hf2 #f #Hf
- elim (gr_nat_inv_succ_dx ā¦ Hf2) -Hf2 [1,3: * |*: // ]
- [ #g2 #k1 #Hg2 #H1 #H2 destruct
- elim (gr_after_inv_push_next ā¦ Hf) -Hf [ |*: // ] #g #Hg #H destruct
- <gr_tls_swap /3 width=5 by gr_after_next/
- | #g2 #Hg2 #H2 destruct
- elim (gr_after_inv_next_sn ā¦ Hf) -Hf [ |*: // ] #g #Hg #H destruct
- <gr_tls_swap /3 width=5 by gr_after_next/
- ]
-]
-qed.
-
-(*** after_uni_sn *)
-lemma gr_after_uni_sn (l2) (l1):
- āf2. @āāŖl1, f2ā« ā l2 ā
- āf. š®āØl2ā© ā ā«±*[l2] f2 ā f ā f2 ā š®āØl1ā© ā f.
-#l2 @(nat_ind_succ ā¦ l2) -l2
-[ #l1 #f2 #Hf2 #f #Hf
- elim (gr_nat_inv_zero_dx ā¦ Hf2) -Hf2 // #g2 #H1 #H2 destruct
- lapply (gr_after_isi_inv_sn ā¦ Hf ?) -Hf
- /3 width=3 by gr_after_isi_dx, gr_after_eq_repl_back/
-| #l2 #IH #l1 #f2 #Hf2 #f #Hf
- elim (gr_after_inv_next_sn ā¦ Hf) -Hf [2,3: // ] #g #Hg #H destruct
- elim (gr_nat_inv_succ_dx ā¦ Hf2) -Hf2 [1,3: * |*: // ]
- [ #g2 #k1 #Hg2 #H1 #H2 destruct /3 width=7 by gr_after_push/
- | #g2 #Hg2 #H2 destruct /3 width=5 by gr_after_next/
- ]
-]
-qed-.
--- /dev/null
+(**************************************************************************)
+(* ___ *)
+(* ||M|| *)
+(* ||A|| A project by Andrea Asperti *)
+(* ||T|| *)
+(* ||I|| Developers: *)
+(* ||T|| The HELM team. *)
+(* ||A|| http://helm.cs.unibo.it *)
+(* \ / *)
+(* \ / This file is distributed under the terms of the *)
+(* v GNU General Public License Version 2 *)
+(* *)
+(**************************************************************************)
+
+include "ground/relocation/gr_tls.ma".
+include "ground/relocation/gr_nat.ma".
+include "ground/relocation/gr_isi_uni.ma".
+include "ground/relocation/gr_after_isi.ma".
+
+(* RELATIONAL COMPOSITION FOR GENERIC RELOCATION MAPS ***********************************************************)
+
+(* Properties with gr_nat and uni *)
+
+(*** after_uni_dx *)
+lemma gr_after_nat_uni (l2) (l1):
+ āf2. @āāŖl1, f2ā« ā l2 ā
+ āf. f2 ā š®āØl1ā© ā f ā š®āØl2ā© ā ā«±*[l2] f2 ā f.
+#l2 @(nat_ind_succ ā¦ l2) -l2
+[ #l1 #f2 #Hf2 #f #Hf
+ elim (gr_nat_inv_zero_dx ā¦ Hf2) -Hf2 // #g2 #H1 #H2 destruct
+ lapply (gr_after_isi_inv_dx ā¦ Hf ?) -Hf
+ /3 width=3 by gr_after_isi_sn, gr_after_eq_repl_back/
+| #l2 #IH #l1 #f2 #Hf2 #f #Hf
+ elim (gr_nat_inv_succ_dx ā¦ Hf2) -Hf2 [1,3: * |*: // ]
+ [ #g2 #k1 #Hg2 #H1 #H2 destruct
+ elim (gr_after_inv_push_next ā¦ Hf) -Hf [ |*: // ] #g #Hg #H destruct
+ <gr_tls_swap /3 width=5 by gr_after_next/
+ | #g2 #Hg2 #H2 destruct
+ elim (gr_after_inv_next_sn ā¦ Hf) -Hf [ |*: // ] #g #Hg #H destruct
+ <gr_tls_swap /3 width=5 by gr_after_next/
+ ]
+]
+qed.
+
+(*** after_uni_sn *)
+lemma gr_nat_after_uni_tls (l2) (l1):
+ āf2. @āāŖl1, f2ā« ā l2 ā
+ āf. š®āØl2ā© ā ā«±*[l2] f2 ā f ā f2 ā š®āØl1ā© ā f.
+#l2 @(nat_ind_succ ā¦ l2) -l2
+[ #l1 #f2 #Hf2 #f #Hf
+ elim (gr_nat_inv_zero_dx ā¦ Hf2) -Hf2 // #g2 #H1 #H2 destruct
+ lapply (gr_after_isi_inv_sn ā¦ Hf ?) -Hf
+ /3 width=3 by gr_after_isi_dx, gr_after_eq_repl_back/
+| #l2 #IH #l1 #f2 #Hf2 #f #Hf
+ elim (gr_after_inv_next_sn ā¦ Hf) -Hf [2,3: // ] #g #Hg #H destruct
+ elim (gr_nat_inv_succ_dx ā¦ Hf2) -Hf2 [1,3: * |*: // ]
+ [ #g2 #k1 #Hg2 #H1 #H2 destruct /3 width=7 by gr_after_push/
+ | #g2 #Hg2 #H2 destruct /3 width=5 by gr_after_next/
+ ]
+]
+qed-.
+++ /dev/null
-(**************************************************************************)
-(* ___ *)
-(* ||M|| *)
-(* ||A|| A project by Andrea Asperti *)
-(* ||T|| *)
-(* ||I|| Developers: *)
-(* ||T|| The HELM team. *)
-(* ||A|| http://helm.cs.unibo.it *)
-(* \ / *)
-(* \ / This file is distributed under the terms of the *)
-(* v GNU General Public License Version 2 *)
-(* *)
-(**************************************************************************)
-
-include "ground/relocation/gr_tls.ma".
-include "ground/relocation/gr_pat.ma".
-(**) (* it should not depend on gr_isi *)
-include "ground/relocation/gr_isi_uni.ma".
-include "ground/relocation/gr_after_isi.ma".
-
-(* RELATIONAL COMPOSITION FOR GENERIC RELOCATION MAPS ***********************************************************)
-
-(* Properties with pat and uni *******************************************************)
-
-(*** after_uni_succ_dx *)
-lemma gr_after_uni_dx (i2) (i1):
- āf2. @āŖi1, f2ā« ā i2 ā
- āf. f2 ā š®āØi1ā© ā f ā š®āØi2ā© ā ā«±*[i2] f2 ā f.
-#i2 elim i2 -i2
-[ #i1 #f2 #Hf2 #f #Hf
- elim (gr_pat_inv_unit_dx ā¦ Hf2) -Hf2 // #g2 #H1 #H2 destruct
- elim (gr_after_inv_push_next ā¦ Hf) -Hf [ |*: // ] #g #Hg #H
- lapply (gr_after_isi_inv_dx ā¦ Hg ?) -Hg
- /4 width=5 by gr_after_isi_sn, gr_after_eq_repl_back, gr_after_next/
-| #i2 #IH #i1 #f2 #Hf2 #f #Hf >nsucc_inj
- elim (gr_pat_inv_succ_dx ā¦ Hf2) -Hf2 [1,3: * |*: // ]
- [ #g2 #j1 #Hg2 #H1 #H2 destruct >nsucc_inj in Hf; #Hf
- elim (gr_after_inv_push_next ā¦ Hf) -Hf [ |*: // ] #g #Hg #H destruct
- <gr_tls_swap /3 width=5 by gr_after_next/
- | #g2 #Hg2 #H2 destruct
- elim (gr_after_inv_next_sn ā¦ Hf) -Hf [2,3: // ] #g #Hg #H destruct
- <gr_tls_swap /3 width=5 by gr_after_next/
- ]
-]
-qed.
-
-(*** after_uni_succ_sn *)
-lemma gr_after_uni_sn (i2) (i1):
- āf2. @āŖi1, f2ā« ā i2 ā
- āf. š®āØi2ā© ā ā«±*[i2] f2 ā f ā f2 ā š®āØi1ā© ā f.
-#i2 elim i2 -i2
-[ #i1 #f2 #Hf2 #f #Hf
- elim (gr_pat_inv_unit_dx ā¦ Hf2) -Hf2 // #g2 #H1 #H2 destruct
- elim (gr_after_inv_next_sn ā¦ Hf) -Hf [ |*: // ] #g #Hg #H destruct
- lapply (gr_after_isi_inv_sn ā¦ Hg ?) -Hg
- /4 width=7 by gr_after_isi_dx, gr_after_eq_repl_back, gr_after_push/
-| #i2 #IH #i1 #f2 #Hf2 #f >nsucc_inj #Hf
- elim (gr_after_inv_next_sn ā¦ Hf) -Hf [2,3: // ] #g #Hg #H destruct
- elim (gr_pat_inv_succ_dx ā¦ Hf2) -Hf2 [1,3: * |*: // ]
- [ #g2 #j1 #Hg2 #H1 #H2 destruct <gr_tls_swap in Hg; /3 width=7 by gr_after_push/
- | #g2 #Hg2 #H2 destruct <gr_tls_swap in Hg; /3 width=5 by gr_after_next/
- ]
-]
-qed-.
-
-(* Advanced properties with uni *)
-
-(*** after_uni_one_dx *)
-lemma gr_after_uni_one_dx:
- āf2,f. ā«Æf2 ā š®āØšā© ā f ā š®āØšā© ā f2 ā f.
-#f2 #f #H
-@(gr_after_uni_dx ā¦ (ā«Æf2))
-/2 width=3 by gr_pat_refl/
-qed.
-
-(*** after_uni_one_sn *)
-lemma gr_after_uni_one_sn:
- āf1,f. š®āØšā© ā f1 ā f ā ā«Æf1 ā š®āØšā© ā f.
-/3 width=3 by gr_after_uni_sn, gr_pat_refl/ qed-.
--- /dev/null
+(**************************************************************************)
+(* ___ *)
+(* ||M|| *)
+(* ||A|| A project by Andrea Asperti *)
+(* ||T|| *)
+(* ||I|| Developers: *)
+(* ||T|| The HELM team. *)
+(* ||A|| http://helm.cs.unibo.it *)
+(* \ / *)
+(* \ / This file is distributed under the terms of the *)
+(* v GNU General Public License Version 2 *)
+(* *)
+(**************************************************************************)
+
+include "ground/relocation/gr_tls.ma".
+include "ground/relocation/gr_pat.ma".
+(**) (* it should not depend on gr_isi *)
+include "ground/relocation/gr_isi_uni.ma".
+include "ground/relocation/gr_after_isi.ma".
+
+(* RELATIONAL COMPOSITION FOR GENERIC RELOCATION MAPS ***********************************************************)
+
+(* Properties with pat and uni and tls *******************************************************)
+
+(*** after_uni_succ_dx *)
+lemma gr_after_pat_uni (i2) (i1):
+ āf2. @āŖi1, f2ā« ā i2 ā
+ āf. f2 ā š®āØi1ā© ā f ā š®āØi2ā© ā ā«±*[i2] f2 ā f.
+#i2 elim i2 -i2
+[ #i1 #f2 #Hf2 #f #Hf
+ elim (gr_pat_inv_unit_dx ā¦ Hf2) -Hf2 // #g2 #H1 #H2 destruct
+ elim (gr_after_inv_push_next ā¦ Hf) -Hf [ |*: // ] #g #Hg #H
+ lapply (gr_after_isi_inv_dx ā¦ Hg ?) -Hg
+ /4 width=5 by gr_after_isi_sn, gr_after_eq_repl_back, gr_after_next/
+| #i2 #IH #i1 #f2 #Hf2 #f #Hf >nsucc_inj
+ elim (gr_pat_inv_succ_dx ā¦ Hf2) -Hf2 [1,3: * |*: // ]
+ [ #g2 #j1 #Hg2 #H1 #H2 destruct >nsucc_inj in Hf; #Hf
+ elim (gr_after_inv_push_next ā¦ Hf) -Hf [ |*: // ] #g #Hg #H destruct
+ <gr_tls_swap /3 width=5 by gr_after_next/
+ | #g2 #Hg2 #H2 destruct
+ elim (gr_after_inv_next_sn ā¦ Hf) -Hf [2,3: // ] #g #Hg #H destruct
+ <gr_tls_swap /3 width=5 by gr_after_next/
+ ]
+]
+qed.
+
+(*** after_uni_succ_sn *)
+lemma gr_pat_after_uni_tls (i2) (i1):
+ āf2. @āŖi1, f2ā« ā i2 ā
+ āf. š®āØi2ā© ā ā«±*[i2] f2 ā f ā f2 ā š®āØi1ā© ā f.
+#i2 elim i2 -i2
+[ #i1 #f2 #Hf2 #f #Hf
+ elim (gr_pat_inv_unit_dx ā¦ Hf2) -Hf2 // #g2 #H1 #H2 destruct
+ elim (gr_after_inv_next_sn ā¦ Hf) -Hf [ |*: // ] #g #Hg #H destruct
+ lapply (gr_after_isi_inv_sn ā¦ Hg ?) -Hg
+ /4 width=7 by gr_after_isi_dx, gr_after_eq_repl_back, gr_after_push/
+| #i2 #IH #i1 #f2 #Hf2 #f >nsucc_inj #Hf
+ elim (gr_after_inv_next_sn ā¦ Hf) -Hf [2,3: // ] #g #Hg #H destruct
+ elim (gr_pat_inv_succ_dx ā¦ Hf2) -Hf2 [1,3: * |*: // ]
+ [ #g2 #j1 #Hg2 #H1 #H2 destruct <gr_tls_swap in Hg; /3 width=7 by gr_after_push/
+ | #g2 #Hg2 #H2 destruct <gr_tls_swap in Hg; /3 width=5 by gr_after_next/
+ ]
+]
+qed-.
+
+(* Advanced properties with uni *)
+
+(*** after_uni_one_dx *)
+lemma gr_after_push_unit:
+ āf2,f. ā«Æf2 ā š®āØšā© ā f ā š®āØšā© ā f2 ā f.
+#f2 #f #H
+@(gr_after_pat_uni ā¦ (ā«Æf2))
+/2 width=3 by gr_pat_refl/
+qed.
+
+(*** after_uni_one_sn *)
+lemma gr_after_unit_sn:
+ āf1,f. š®āØšā© ā f1 ā f ā ā«Æf1 ā š®āØšā© ā f.
+/3 width=3 by gr_pat_after_uni_tls, gr_pat_refl/ qed-.
[ "gr_sdj ( ? ā„ ? )" "gr_sdj_eq" "gr_sdj_isi" * ]
[ "gr_sle ( ? ā ? )" "gr_sle_eq" "gr_sle_pushs" "gr_sle_tls" "gr_sle_isi" "gr_sle_isd" "gr_sle_sle" * ]
[ "gr_coafter ( ? ~ā ? ā ? )" "gr_coafter_eq" "gr_coafter_uni_pushs" "gr_coafter_pat_tls" "gr_coafter_nat_tls" "gr_coafter_nat_tls_pushs" "gr_coafter_isi" "gr_coafter_isu" "gr_coafter_ist_isi" "gr_coafter_ist_isf" "gr_coafter_coafter" "gr_coafter_coafter_ist" * ]
- [ "gr_after ( ? ā ? ā ? )" "gr_after_eq" "gr_after_uni" "gr_after_basic" "gr_after_pat" "gr_after_pat_tls" "gr_after_pat_uni" "gr_after_nat_uni" "gr_after_isi" "gr_after_isu" "gr_after_ist" "gr_after_ist_isi" "gr_after_after" "gr_after_after_ist" * ]
+ [ "gr_after ( ? ā ? ā ? )" "gr_after_eq" "gr_after_uni" "gr_after_basic" "gr_after_pat" "gr_after_pat_tls" "gr_after_pat_uni_tls" "gr_after_nat_uni_tls" "gr_after_isi" "gr_after_isu" "gr_after_ist" "gr_after_ist_isi" "gr_after_after" "gr_after_after_ist" * ]
[ "gr_isd ( šāŖ?ā« )" "gr_isd_eq" "gr_isd_tl" "gr_isd_nexts" "gr_isd_tls" * ]
[ "gr_ist ( šāŖ?ā« )" "gr_ist_tls" "gr_ist_isi" "gr_ist_ist" * ]
[ "gr_isf ( š
āŖ?ā« )" "gr_isf_eq" "gr_isf_tl" "gr_isf_pushs" "fr_isf_tls" "gr_ifs_uni" "gr_isf_isu" * ]