From 6604a232815858a6c75dd25ac45abd68438077ff Mon Sep 17 00:00:00 2001 From: Ferruccio Guidi Date: Wed, 17 Feb 2021 17:40:28 +0100 Subject: [PATCH] propagating the arithmetics library, partial commit + lib ported + minor corrections and renaming + old parked version of ynat removed --- .../lambdadelta/ground/arith/arith_2b.ma | 3 +- .../lambdadelta/ground/arith/ynat_le.ma | 3 +- .../{ynat_le_minus1.ma => ynat_le_lminus.ma} | 22 ++--- ..._minus1_plus.ma => ynat_le_lminus_plus.ma} | 50 +++++------ ..._minus1_succ.ma => ynat_le_lminus_succ.ma} | 10 +-- .../arith/{ynat_minus1.ma => ynat_lminus.ma} | 22 ++--- ...nat_minus1_plus.ma => ynat_lminus_plus.ma} | 4 +- ...nat_minus1_succ.ma => ynat_lminus_succ.ma} | 4 +- ...t_lt_le_minus1.ma => ynat_lt_le_lminus.ma} | 6 +- ...nus1_plus.ma => ynat_lt_le_lminus_plus.ma} | 14 ++-- .../{ynat_lt_minus1.ma => ynat_lt_lminus.ma} | 20 ++--- ..._minus1_plus.ma => ynat_lt_lminus_plus.ma} | 10 +-- .../lambdadelta/ground/arith/ynat_succ.ma | 2 +- .../lambdadelta/ground/etc/ynat_old/ynat.etc | 53 ------------ .../ground/etc/ynat_old/ynat_le.etc | 84 ------------------- .../ground/etc/ynat_old/ynat_pred.etc | 40 --------- .../contribs/lambdadelta/ground/lib/bool.ma | 43 +++------- .../lambdadelta/ground/lib/bool_and.ma | 38 +++++++++ .../ynat_iszero.etc => lib/bool_or.ma} | 35 ++++---- .../contribs/lambdadelta/ground/lib/exteq.ma | 2 +- .../contribs/lambdadelta/ground/lib/list.ma | 23 +++-- .../lambdadelta/ground/lib/list_eq.ma | 31 +++---- .../lambdadelta/ground/lib/list_length.ma | 53 +++++++----- .../contribs/lambdadelta/ground/lib/logic.ma | 12 ++- .../lambdadelta/ground/lib/lstar_2a.ma | 15 +++- .../contribs/lambdadelta/ground/lib/ltc.ma | 14 ++-- .../lambdadelta/ground/lib/ltc_ctc.ma | 8 +- .../lambdadelta/ground/lib/relations.ma | 4 +- .../contribs/lambdadelta/ground/lib/star.ma | 4 +- .../contribs/lambdadelta/ground/lib/stream.ma | 10 ++- .../lambdadelta/ground/lib/stream_eq.ma | 61 +++++++------- .../lambdadelta/ground/lib/stream_hdtl.ma | 26 +++--- .../lambdadelta/ground/lib/stream_tls.ma | 41 +++++---- .../lambdadelta/ground/web/ground_src.tbl | 10 +-- 34 files changed, 334 insertions(+), 443 deletions(-) rename matita/matita/contribs/lambdadelta/ground/arith/{ynat_le_minus1.ma => ynat_le_lminus.ma} (76%) rename matita/matita/contribs/lambdadelta/ground/arith/{ynat_le_minus1_plus.ma => ynat_le_lminus_plus.ma} (74%) rename matita/matita/contribs/lambdadelta/ground/arith/{ynat_le_minus1_succ.ma => ynat_le_lminus_succ.ma} (83%) rename matita/matita/contribs/lambdadelta/ground/arith/{ynat_minus1.ma => ynat_lminus.ma} (81%) rename matita/matita/contribs/lambdadelta/ground/arith/{ynat_minus1_plus.ma => ynat_lminus_plus.ma} (94%) rename matita/matita/contribs/lambdadelta/ground/arith/{ynat_minus1_succ.ma => ynat_lminus_succ.ma} (92%) rename matita/matita/contribs/lambdadelta/ground/arith/{ynat_lt_le_minus1.ma => ynat_lt_le_lminus.ma} (90%) rename matita/matita/contribs/lambdadelta/ground/arith/{ynat_lt_le_minus1_plus.ma => ynat_lt_le_lminus_plus.ma} (79%) rename matita/matita/contribs/lambdadelta/ground/arith/{ynat_lt_minus1.ma => ynat_lt_lminus.ma} (77%) rename matita/matita/contribs/lambdadelta/ground/arith/{ynat_lt_minus1_plus.ma => ynat_lt_lminus_plus.ma} (85%) delete mode 100644 matita/matita/contribs/lambdadelta/ground/etc/ynat_old/ynat.etc delete mode 100644 matita/matita/contribs/lambdadelta/ground/etc/ynat_old/ynat_le.etc delete mode 100644 matita/matita/contribs/lambdadelta/ground/etc/ynat_old/ynat_pred.etc create mode 100644 matita/matita/contribs/lambdadelta/ground/lib/bool_and.ma rename matita/matita/contribs/lambdadelta/ground/{etc/ynat_old/ynat_iszero.etc => lib/bool_or.ma} (65%) diff --git a/matita/matita/contribs/lambdadelta/ground/arith/arith_2b.ma b/matita/matita/contribs/lambdadelta/ground/arith/arith_2b.ma index f284a3c6c..842fcc72a 100644 --- a/matita/matita/contribs/lambdadelta/ground/arith/arith_2b.ma +++ b/matita/matita/contribs/lambdadelta/ground/arith/arith_2b.ma @@ -22,7 +22,8 @@ lemma arith_l4 (m11) (m12) (m21) (m22): elim (nat_split_le_ge (m11+m12) m21) #Hm1121 [ lapply (nle_trans m11 ??? Hm1121) // #Hm121 lapply (nle_minus_dx_dx … Hm1121) #Hm12211 - yinj_nat_zero #H +[ #m #n yinj_nat_zero #H /4 width=1 by nle_eq_zero_minus, yle_inj, eq_inv_yinj_nat_bi/ -| #n H12 #H lapply (yle_inv_plus_bi_sn_inj … H) -H #Hmy2 generalize in match H12; -H12 (**) (* rewrite in hyp *) ->(yplus_minus1_sn_refl_sn … Hmy2) in ⊢ (%→?); (yplus_lminus_sn_refl_sn … Hmy2) in ⊢ (%→?); (yplus_minus1_dx_refl_sn … Hnx1) in ⊢ (%→?); -Hnx1 #H +>(yplus_lminus_dx_refl_sn … Hnx1) in ⊢ (%→?); -Hnx1 #H lapply (eq_inv_yplus_bi_sn_inj … H) -H #H12 /2 width=1 by conj/ qed-. @@ -107,7 +107,7 @@ qed-. lemma yle_inv_plus_sn_inj_dx (n) (x) (z): x + yinj_nat n ≤ z → ∧∧ x ≤ z - n & yinj_nat n ≤ z. -/3 width=3 by yle_plus_sn_dx_minus1_dx, yle_trans, conj/ +/3 width=3 by yle_plus_sn_dx_lminus_dx, yle_trans, conj/ qed-. (*** yle_inv_plus_inj1 *) diff --git a/matita/matita/contribs/lambdadelta/ground/arith/ynat_le_minus1_succ.ma b/matita/matita/contribs/lambdadelta/ground/arith/ynat_le_lminus_succ.ma similarity index 83% rename from matita/matita/contribs/lambdadelta/ground/arith/ynat_le_minus1_succ.ma rename to matita/matita/contribs/lambdadelta/ground/arith/ynat_le_lminus_succ.ma index 76cfcaf73..93e73cf84 100644 --- a/matita/matita/contribs/lambdadelta/ground/arith/ynat_le_minus1_succ.ma +++ b/matita/matita/contribs/lambdadelta/ground/arith/ynat_le_lminus_succ.ma @@ -13,17 +13,17 @@ (**************************************************************************) include "ground/arith/ynat_succ.ma". -include "ground/arith/ynat_le_minus1.ma". +include "ground/arith/ynat_le_lminus.ma". (* ORDER FOR NON-NEGATIVE INTEGERS WITH INFINITY ****************************) -(* Constructions with yminus1 and ysucc *************************************) +(* Constructions with ylminus and ysucc *************************************) (*** yminus_succ1_inj *) -lemma yminus1_succ_sn (x) (n): +lemma ylminus_succ_sn (x) (n): yinj_nat n ≤ x → ↑(x - n) = ↑x - n. #x @(ynat_split_nat_inf … x) -x // #m #n #Hnm -yinj_nat_zero >(nminus_refl m) +#n #Hmn yinj_nat_zero >(nminus_refl m) /4 width=1 by ylt_inj, ylt_inv_inj_bi, nlt_minus_bi_dx/ qed. -(* Inversions with yminus1 **************************************************) +(* Inversions with ylminus **************************************************) (*** yminus_to_lt *) -lemma ylt_inv_zero_minus1 (m) (y): +lemma ylt_inv_zero_lminus (m) (y): (𝟎) < y - m → yinj_nat m < y. #m #y @(ynat_split_nat_inf … y) -y // -#n yinj_nat_zero >(nminus_refl m) #Hmm +#n yinj_nat_zero >(nminus_refl m) #Hmm /4 width=2 by ylt_inv_inj_bi, ylt_inj, nlt_inv_minus_bi_dx/ qed-. -(* Destructions with yminus1 ************************************************) +(* Destructions with ylminus ************************************************) (*** yminus_pred *) -lemma yminus1_pred_bi (x:ynat) (n): +lemma ylminus_pred_bi (x:ynat) (n): (𝟎) < x → 𝟎 < n → x - n = ↓x - ↓n. #x @(ynat_split_nat_inf … x) -x // #m #n >yinj_nat_zero -#Hm #Hn ysucc_inj H -H // -qed-. +lemma orb_true_dx (b): + (b ∨ Ⓣ) = Ⓣ. +* // qed. + +lemma orb_true_sn (b): + (Ⓣ ∨ b) = Ⓣ. +// qed. -lemma discr_YO_YS: ∀n. ynat_of_nat 0 = ⫯n → ⊥. (**) (* explicit coercion *) -/2 width=2 by discr_YS_YO/ qed-. +(* Advanced inversions ******************************************************) + +lemma orb_inv_false_dx (b1) (b2): + (b1 ∨ b2) = Ⓕ → ∧∧ b1 = Ⓕ & b2 = Ⓕ. +* normalize /2 width=1 by conj/ #b2 #H destruct +qed-. diff --git a/matita/matita/contribs/lambdadelta/ground/lib/exteq.ma b/matita/matita/contribs/lambdadelta/ground/lib/exteq.ma index 6e3928118..5b655e686 100644 --- a/matita/matita/contribs/lambdadelta/ground/lib/exteq.ma +++ b/matita/matita/contribs/lambdadelta/ground/lib/exteq.ma @@ -24,7 +24,7 @@ interpretation "extensional equivalence" 'DotEq A B f1 f2 = (exteq A B f1 f2). -(* Basic Constructions ******************************************************) +(* Basic constructions ******************************************************) lemma exteq_refl (A) (B): reflexive … (exteq A B). // qed. diff --git a/matita/matita/contribs/lambdadelta/ground/lib/list.ma b/matita/matita/contribs/lambdadelta/ground/lib/list.ma index 7864ed0ab..781fc27a5 100644 --- a/matita/matita/contribs/lambdadelta/ground/lib/list.ma +++ b/matita/matita/contribs/lambdadelta/ground/lib/list.ma @@ -19,15 +19,20 @@ include "ground/lib/relations.ma". (* LISTS ********************************************************************) inductive list (A:Type[0]) : Type[0] := - | nil : list A - | cons: A → list A → list A. +| list_nil : list A +| list_cons: A → list A → list A +. -interpretation "nil (list)" 'CircledE A = (nil A). +interpretation + "nil (lists)" + 'CircledE A = (list_nil A). -interpretation "cons (list)" 'OPlusRight A hd tl = (cons A hd tl). +interpretation + "cons (lists)" + 'OPlusRight A hd tl = (list_cons A hd tl). -rec definition all A (R:predicate A) (l:list A) on l ≝ - match l with - [ nil ⇒ ⊤ - | cons hd tl ⇒ ∧∧ R hd & all A R tl - ]. +rec definition list_all A (R:predicate A) (l:list A) on l ≝ +match l with +[ list_nil ⇒ ⊤ +| list_cons hd tl ⇒ ∧∧ R hd & list_all A R tl +]. diff --git a/matita/matita/contribs/lambdadelta/ground/lib/list_eq.ma b/matita/matita/contribs/lambdadelta/ground/lib/list_eq.ma index 6f89d187f..ffa06ab6d 100644 --- a/matita/matita/contribs/lambdadelta/ground/lib/list_eq.ma +++ b/matita/matita/contribs/lambdadelta/ground/lib/list_eq.ma @@ -17,37 +17,38 @@ include "ground/lib/list.ma". (* EXTENSIONAL EQUIVALENCE OF LISTS *****************************************) -rec definition eq_list A (l1,l2:list A) on l1 ≝ +rec definition list_eq A (l1,l2:list A) on l1 ≝ match l1 with -[ nil ⇒ +[ list_nil ⇒ match l2 with - [ nil ⇒ ⊤ - | cons _ _ ⇒ ⊥ + [ list_nil ⇒ ⊤ + | list_cons _ _ ⇒ ⊥ ] -| cons a1 l1 ⇒ +| list_cons a1 l1 ⇒ match l2 with - [ nil ⇒ ⊥ - | cons a2 l2 ⇒ a1 = a2 ∧ eq_list A l1 l2 + [ list_nil ⇒ ⊥ + | list_cons a2 l2 ⇒ a1 = a2 ∧ list_eq A l1 l2 ] ]. -interpretation "extensional equivalence (list)" - 'RingEq A l1 l2 = (eq_list A l1 l2). +interpretation + "extensional equivalence (lists)" + 'RingEq A l1 l2 = (list_eq A l1 l2). -(* Basic properties *********************************************************) +(* Basic constructions ******************************************************) -lemma eq_list_refl (A): reflexive … (eq_list A). +lemma list_eq_refl (A): reflexive … (list_eq A). #A #l elim l -l /2 width=1 by conj/ qed. -(* Main properties **********************************************************) +(* Main constructions *******************************************************) -theorem eq_eq_list (A,l1,l2): l1 = l2 → l1 ≗{A} l2. +theorem eq_list_eq (A,l1,l2): l1 = l2 → l1 ≗{A} l2. // qed. -(* Main inversion propertiess ***********************************************) +(* Main inversions **********************************************************) -theorem eq_list_inv_eq (A,l1,l2): l1 ≗{A} l2 → l1 = l2. +theorem list_eq_inv_eq (A,l1,l2): l1 ≗{A} l2 → l1 = l2. #A #l1 elim l1 -l1 [| #a1 #l1 #IH ] * [ // | #a2 #l2 #H elim H diff --git a/matita/matita/contribs/lambdadelta/ground/lib/list_length.ma b/matita/matita/contribs/lambdadelta/ground/lib/list_length.ma index ab736bdd4..0d67e7390 100644 --- a/matita/matita/contribs/lambdadelta/ground/lib/list_length.ma +++ b/matita/matita/contribs/lambdadelta/ground/lib/list_length.ma @@ -12,44 +12,53 @@ (* *) (**************************************************************************) -include "ground/lib/arith.ma". include "ground/lib/list.ma". +include "ground/arith/nat_succ.ma". -(* LENGTH OF A LIST *********************************************************) +(* LENGTH FOR LISTS *********************************************************) -rec definition length A (l:list A) on l ≝ match l with -[ nil ⇒ 0 -| cons _ l ⇒ ↑(length A l) +rec definition list_length A (l:list A) on l ≝ +match l with +[ list_nil ⇒ 𝟎 +| list_cons _ l ⇒ ↑(list_length A l) ]. -interpretation "length (list)" - 'card l = (length ? l). +interpretation + "length (lists)" + 'card l = (list_length ? l). -(* Basic properties *********************************************************) +(* Basic constructions ******************************************************) -lemma length_nil (A:Type[0]): |nil A| = 0. +lemma list_length_nil (A:Type[0]): |list_nil A| = 𝟎. // qed. -lemma length_cons (A:Type[0]) (l:list A) (a:A): |a⨮l| = ↑|l|. +lemma list_length_cons (A:Type[0]) (l:list A) (a:A): |a⨮l| = ↑|l|. // qed. -(* Basic inversion lemmas ***************************************************) +(* Basic inversions *********************************************************) -lemma length_inv_zero_dx (A:Type[0]) (l:list A): |l| = 0 → l = Ⓔ. -#A * // #a #l >length_cons #H destruct +lemma list_length_inv_zero_dx (A:Type[0]) (l:list A): + |l| = 𝟎 → l = Ⓔ. +#A * // #a #l >list_length_cons #H +elim (eq_inv_nsucc_zero … H) qed-. -lemma length_inv_zero_sn (A:Type[0]) (l:list A): 0 = |l| → l = Ⓔ. -/2 width=1 by length_inv_zero_dx/ qed-. +lemma list_length_inv_zero_sn (A:Type[0]) (l:list A): + (𝟎) = |l| → l = Ⓔ. +/2 width=1 by list_length_inv_zero_dx/ qed-. -lemma length_inv_succ_dx (A:Type[0]) (l:list A) (x): |l| = ↑x → - ∃∃tl,a. x = |tl| & l = a ⨮ tl. +lemma list_length_inv_succ_dx (A:Type[0]) (l:list A) (x): + |l| = ↑x → + ∃∃tl,a. x = |tl| & l = a ⨮ tl. #A * -[ #x >length_nil #H destruct -| #a #l #x >length_cons #H destruct /2 width=4 by ex2_2_intro/ +[ #x >list_length_nil #H + elim (eq_inv_zero_nsucc … H) +| #a #l #x >list_length_cons #H + /3 width=4 by eq_inv_nsucc_bi, ex2_2_intro/ ] qed-. -lemma length_inv_succ_sn (A:Type[0]) (l:list A) (x): ↑x = |l| → - ∃∃tl,a. x = |tl| & l = a ⨮ tl. -/2 width=1 by length_inv_succ_dx/ qed. +lemma list_length_inv_succ_sn (A:Type[0]) (l:list A) (x): + ↑x = |l| → + ∃∃tl,a. x = |tl| & l = a ⨮ tl. +/2 width=1 by list_length_inv_succ_dx/ qed-. diff --git a/matita/matita/contribs/lambdadelta/ground/lib/logic.ma b/matita/matita/contribs/lambdadelta/ground/lib/logic.ma index dc7216480..fc2e2ea85 100644 --- a/matita/matita/contribs/lambdadelta/ground/lib/logic.ma +++ b/matita/matita/contribs/lambdadelta/ground/lib/logic.ma @@ -18,11 +18,17 @@ include "ground/notation/xoa/true_0.ma". include "ground/notation/xoa/or_2.ma". include "ground/notation/xoa/and_2.ma". -interpretation "logical false" 'false = False. +interpretation + "false (logic)" + 'false = False. -interpretation "logical true" 'true = True. +interpretation + "true (logic)" + 'true = True. -(* Logical properties missing in the basic library **************************) +(* LOGIC ********************************************************************) + +(* Constructions with And ***************************************************) lemma commutative_and: ∀A,B. A ∧ B → B ∧ A. #A #B * /2 width=1 by conj/ diff --git a/matita/matita/contribs/lambdadelta/ground/lib/lstar_2a.ma b/matita/matita/contribs/lambdadelta/ground/lib/lstar_2a.ma index ae707f2b9..ba513ae85 100644 --- a/matita/matita/contribs/lambdadelta/ground/lib/lstar_2a.ma +++ b/matita/matita/contribs/lambdadelta/ground/lib/lstar_2a.ma @@ -12,9 +12,16 @@ (* *) (**************************************************************************) -include "arithmetics/lstar.ma". +include "ground/lib/ltc.ma". +include "ground/arith/nat_plus.ma". -(* PROPERTIES OF NAT-LABELED REFLEXIVE AND TRANSITIVE CLOSURE ***************) +(* NAT-LABELED REFLEXIVE AND TRANSITIVE CLOSURE FOR FOR λδ-2A ***************) -definition llstar: ∀A:Type[0]. ∀B. (A→relation B) → nat → (A→relation B) ≝ - λA,B,R,l,a. lstar … (R a) l. +definition lstar_aux (B) (R:relation B) (l): relation B ≝ + λb1,b2. ∨∨ (∧∧ l = 𝟎 & b1 = b2) | (∧∧ l = 𝟏 & R b1 b2). + +definition lstar (B) (R:relation B): nat → relation B ≝ + ltc … nplus … (lstar_aux … R). + +definition llstar (A) (B) (R:relation3 A B B) (l:nat): relation3 A B B ≝ + λa. lstar … (R a) l. diff --git a/matita/matita/contribs/lambdadelta/ground/lib/ltc.ma b/matita/matita/contribs/lambdadelta/ground/lib/ltc.ma index 4f3962671..1d08fb15d 100644 --- a/matita/matita/contribs/lambdadelta/ground/lib/ltc.ma +++ b/matita/matita/contribs/lambdadelta/ground/lib/ltc.ma @@ -12,7 +12,7 @@ (* *) (**************************************************************************) -include "ground/insert_eq/insert_eq_0.ma". +include "ground/insert_eq/insert_eq_1.ma". include "ground/lib/functions.ma". (* LABELLED TRANSITIVE CLOSURE **********************************************) @@ -22,7 +22,7 @@ inductive ltc (A:Type[0]) (f) (B) (R:relation3 A B B): relation3 A B B ≝ | ltc_trans: ∀a1,a2,b1,b,b2. ltc … a1 b1 b → ltc … a2 b b2 → ltc … (f a1 a2) b1 b2 . -(* Basic properties *********************************************************) +(* Basic constructions ******************************************************) lemma ltc_sn (A) (f) (B) (R): ∀a1,b1,b. R a1 b1 b → ∀a2,b2. ltc A f B R a2 b b2 → ltc … f … R (f a1 a2) b1 b2. @@ -32,13 +32,13 @@ lemma ltc_dx (A) (f) (B) (R): ∀a1,b1,b. ltc A f B R a1 b1 b → ∀a2,b2. R a2 b b2 → ltc … f … R (f a1 a2) b1 b2. /3 width=3 by ltc_rc, ltc_trans/ qed. -(* Basic eliminators ********************************************************) +(* Basic eliminations *******************************************************) lemma ltc_ind_sn (A) (f) (B) (R) (Q:relation2 A B) (b2): associative … f → (∀a,b1. R a b1 b2 → Q a b1) → (∀a1,a2,b1,b. R a1 b1 b → ltc … f … R a2 b b2 → Q a2 b → Q (f a1 a2) b1) → ∀a,b1. ltc … f … R a b1 b2 → Q a b1. -#A #f #B #R #Q #b2 #Hf #IH1 #IH2 #a #b1 @(insert_eq_0 … b2) +#A #f #B #R #Q #b2 #Hf #IH1 #IH2 #a #b1 @(insert_eq_1 … b2) #b0 #H elim H -a -b1 -b0 /2 width=2 by/ #a1 #a2 #b1 #b #b0 #H #Hb2 #_ generalize in match Hb2; generalize in match a2; -Hb2 -a2 @@ -49,14 +49,14 @@ lemma ltc_ind_dx (A) (f) (B) (R) (Q:A→predicate B) (b1): associative … f → (∀a,b2. R a b1 b2 → Q a b2) → (∀a1,a2,b,b2. ltc … f … R a1 b1 b → Q a1 b → R a2 b b2 → Q (f a1 a2) b2) → ∀a,b2. ltc … f … R a b1 b2 → Q a b2. -#A #f #B #R #Q #b1 #Hf #IH1 #IH2 #a #b2 @(insert_eq_0 … b1) +#A #f #B #R #Q #b1 #Hf #IH1 #IH2 #a #b2 @(insert_eq_1 … b1) #b0 #H elim H -a -b0 -b2 /2 width=2 by/ #a1 #a2 #b0 #b #b2 #Hb0 #H #IHb0 #_ generalize in match IHb0; generalize in match Hb0; generalize in match a1; -IHb0 -Hb0 -a1 elim H -a2 -b -b2 /4 width=4 by ltc_trans/ qed-. -(* Advanced elimiators with reflexivity *************************************) +(* Advanced elimiations with reflexivity ************************************) lemma ltc_ind_sn_refl (A) (i) (f) (B) (R) (Q:relation2 A B) (b2): associative … f → right_identity … f i → reflexive B (R i) → @@ -78,7 +78,7 @@ lemma ltc_ind_dx_refl (A) (i) (f) (B) (R) (Q:A→predicate B) (b1): >(H2f a) -H2f /3 width=4 by ltc_rc/ qed-. -(* Properties with lsub *****************************************************) +(* Constructions with lsub **************************************************) lemma ltc_lsub_trans: ∀A,f. associative … f → ∀B,C,R,S. (∀n. lsub_trans B C (λL. R L n) S) → diff --git a/matita/matita/contribs/lambdadelta/ground/lib/ltc_ctc.ma b/matita/matita/contribs/lambdadelta/ground/lib/ltc_ctc.ma index 0f8ddd107..54b1117b6 100644 --- a/matita/matita/contribs/lambdadelta/ground/lib/ltc_ctc.ma +++ b/matita/matita/contribs/lambdadelta/ground/lib/ltc_ctc.ma @@ -17,9 +17,9 @@ include "ground/lib/ltc.ma". (* LABELLED TRANSITIVE CLOSURE **********************************************) -alias symbol "subseteq" = "relation inclusion". +alias symbol "subseteq" = "relation inclusion". (**) -(* Properties with contextual transitive closure ****************************) +(* Constructions with contextual transitive closure *************************) lemma ltc_CTC (C) (A) (i) (f) (B) (R:relation4 C A B B): left_identity … f i → @@ -28,13 +28,13 @@ lemma ltc_CTC (C) (A) (i) (f) (B) (R:relation4 C A B B): #b #b2 #_ #Hb2 #IH >(Hf i) -Hf /2 width=3 by ltc_dx/ qed. -(* Inversion lemmas with contextual transitive closure **********************) +(* Inversions with contextual transitive closure ****************************) lemma ltc_inv_CTC (C) (A) (i) (f) (B) (R:relation4 C A B B): associative … f → annulment_2 … f i → ∀c. ltc … f … (R c) i ⊆ CTC … (λc. R c i) c. #C #A #i #f #B #R #H1f #H2f #c #b1 #b2 -@(insert_eq_0 … i) #a #H +@(insert_eq_1 … i) #a #H @(ltc_ind_dx A f B … H) -a -b2 /2 width=1 by inj/ -H1f #a1 #a2 #b #b2 #_ #IH #Hb2 #H