From: matitaweb Date: Tue, 30 Apr 2013 14:51:34 +0000 (+0000) Subject: commit by user ricciott X-Git-Tag: make_still_working~1171 X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=commitdiff_plain;h=79b20b5845577c9359b9a4218f8eedd2a322e416;p=helm.git commit by user ricciott --- diff --git a/weblib/arithmetics/bigops.ma b/weblib/arithmetics/bigops.ma index 41c680088..7936b5dd0 100644 --- a/weblib/arithmetics/bigops.ma +++ b/weblib/arithmetics/bigops.ma @@ -42,25 +42,25 @@ qed. |false ⇒ bigop k p B nil op f] ]. -notation "\big [ op , nil ]_{ ident i < n | p } f" +notation "ref 'bigop \big [ op , nil ]_{ ident i < n | p } f" with precedence 80 for @{'bigop $n $op $nil (λ${ident i}. $p) (λ${ident i}. $f)}. -notation "\big [ op , nil ]_{ ident i < n } f" +notation "ref 'bigop \big [ op , nil ]_{ ident i < n } f" with precedence 80 for @{'bigop $n $op $nil (λ${ident i}.true) (λ${ident i}. $f)}. interpretation "bigop" 'bigop n op nil p f = (bigop n p ? nil op f). -notation "\big [ op , nil ]_{ ident j ∈ [a,b[ | p } f" +notation "ref 'bigop \big [ op , nil ]_{ ident j ∈ [a,b[ | p } f" with precedence 80 -for @{'bigop ($b-$a) $op $nil (λ${ident j}.((λ${ident j}.$p) (${ident j}+$a))) - (λ${ident j}.((λ${ident j}.$f)(${ident j}+$a)))}. +for @{'bigop (minus $b $a) $op $nil (λ${ident j}.((λ${ident j}.$p) (plus ${ident j} $a))) + (λ${ident j}.((λ${ident j}.$f)(plus ${ident j} $a)))}. -notation "\big [ op , nil ]_{ ident j ∈ [a,b[ } f" +notation "ref 'bigop \big [ op , nil ]_{ ident j ∈ [a,b[ } f" with precedence 80 -for @{'bigop ($b-$a) $op $nil (λ${ident j}.((λ${ident j}.true) (${ident j}+$a))) - (λ${ident j}.((λ${ident j}.$f)(${ident j}+$a)))}. +for @{'bigop (minus $b $a) $op $nil (λ${ident j}.((λ${ident j}.true) (plus ${ident j} $a))) + (λ${ident j}.((λ${ident j}.$f)(plus ${ident j} $a)))}. (* notation "\big [ op , nil ]_{( term 50) a ≤ ident j < b | p } f" with precedence 80 @@ -70,19 +70,19 @@ for @{\big[$op,$nil]_{${ident j} < ($b-$a) | ((λ${ident j}.$p) (${ident j}+$a)) interpretation "bigop" 'bigop n op nil p f = (bigop n p ? nil op f). img class="anchor" src="icons/tick.png" id="bigop_Strue"lemma bigop_Strue: ∀k,p,B,nil,op.∀f:a href="cic:/matita/arithmetics/nat/nat.ind(1,0,0)"nat/a→B. p k a title="leibnitz's equality" href="cic:/fakeuri.def(1)"=/a a href="cic:/matita/basics/bool/bool.con(0,1,0)"true/a → - \big[op,nil]_{i < a href="cic:/matita/arithmetics/nat/nat.con(0,2,0)"S/a k | p ia title="bigop" href="cic:/fakeuri.def(1)"}/a(f i) a title="leibnitz's equality" href="cic:/fakeuri.def(1)"=/a - op (f k) (\big[op,nil]_{i < k | p ia title="bigop" href="cic:/fakeuri.def(1)"}/a(f i)). + a title="bigop" href="cic:/fakeuri.def(1)"\big/a[op,nil]_{i < a href="cic:/matita/arithmetics/nat/nat.con(0,2,0)"S/a k | p ia title="bigop" href="cic:/fakeuri.def(1)"}/a(f i) a title="leibnitz's equality" href="cic:/fakeuri.def(1)"=/a + op (f k) (a title="bigop" href="cic:/fakeuri.def(1)"\big/a[op,nil]_{i < k | p ia title="bigop" href="cic:/fakeuri.def(1)"}/a(f i)). #k #p #B #nil #op #f #H normalize >H // qed. img class="anchor" src="icons/tick.png" id="bigop_Sfalse"lemma bigop_Sfalse: ∀k,p,B,nil,op.∀f:a href="cic:/matita/arithmetics/nat/nat.ind(1,0,0)"nat/a→B. p k a title="leibnitz's equality" href="cic:/fakeuri.def(1)"=/a a href="cic:/matita/basics/bool/bool.con(0,2,0)"false/a → - \big[op,nil]_{ i < a href="cic:/matita/arithmetics/nat/nat.con(0,2,0)"S/a k | p ia title="bigop" href="cic:/fakeuri.def(1)"}/a(f i) a title="leibnitz's equality" href="cic:/fakeuri.def(1)"=/a - \big[op,nil]_{i < k | p ia title="bigop" href="cic:/fakeuri.def(1)"}/a(f i). + a title="bigop" href="cic:/fakeuri.def(1)"\big/a[op,nil]_{ i < a href="cic:/matita/arithmetics/nat/nat.con(0,2,0)"S/a k | p ia title="bigop" href="cic:/fakeuri.def(1)"}/a(f i) a title="leibnitz's equality" href="cic:/fakeuri.def(1)"=/a + a title="bigop" href="cic:/fakeuri.def(1)"\big/a[op,nil]_{i < k | p ia title="bigop" href="cic:/fakeuri.def(1)"}/a(f i). #k #p #B #nil #op #f #H normalize >H // qed. img class="anchor" src="icons/tick.png" id="same_bigop"lemma same_bigop : ∀k,p1,p2,B,nil,op.∀f,g:a href="cic:/matita/arithmetics/nat/nat.ind(1,0,0)"nat/a→B. a href="cic:/matita/arithmetics/bigops/sameF_upto.def(2)"sameF_upto/a k a href="cic:/matita/basics/bool/bool.ind(1,0,0)"bool/a p1 p2 → a href="cic:/matita/arithmetics/bigops/sameF_p.def(2)"sameF_p/a k p1 B f g → - \big[op,nil]_{i < k | p1 ia title="bigop" href="cic:/fakeuri.def(1)"}/a(f i) a title="leibnitz's equality" href="cic:/fakeuri.def(1)"=/a - \big[op,nil]_{i < k | p2 ia title="bigop" href="cic:/fakeuri.def(1)"}/a(g i). + a title="bigop" href="cic:/fakeuri.def(1)"\big/a[op,nil]_{i < k | p1 ia title="bigop" href="cic:/fakeuri.def(1)"}/a(f i) a title="leibnitz's equality" href="cic:/fakeuri.def(1)"=/a + a title="bigop" href="cic:/fakeuri.def(1)"\big/a[op,nil]_{i < k | p2 ia title="bigop" href="cic:/fakeuri.def(1)"}/a(g i). #k #p1 #p2 #B #nil #op #f #g (elim k) // #n #Hind #samep #samef normalize >Hind [|@(a href="cic:/matita/arithmetics/bigops/sameF_p_le.def(5)"sameF_p_le/a … samef) // |@(a href="cic:/matita/arithmetics/bigops/sameF_upto_le.def(5)"sameF_upto_le/a … samep) //] @@ -91,8 +91,8 @@ normalize // <(samef … (a href="cic:/matita/arithmetics/nat/le.con(0,1,1)"le qed. img class="anchor" src="icons/tick.png" id="pad_bigop"theorem pad_bigop: ∀k,n,p,B,nil,op.∀f:a href="cic:/matita/arithmetics/nat/nat.ind(1,0,0)"nat/a→B. n a title="natural 'less or equal to'" href="cic:/fakeuri.def(1)"≤/a k → -\big[op,nil]_{i < n | p ia title="bigop" href="cic:/fakeuri.def(1)"}/a(f i) - a title="leibnitz's equality" href="cic:/fakeuri.def(1)"=/a \big[op,nil]_{i < k | font class="Apple-style-span" color="#FF0000"if/font (a href="cic:/matita/arithmetics/nat/leb.fix(0,0,1)"leb/a n i) then a href="cic:/matita/basics/bool/bool.con(0,2,0)"false/a else p ia title="bigop" href="cic:/fakeuri.def(1)"}/a(f i). +a title="bigop" href="cic:/fakeuri.def(1)"\big/a[op,nil]_{i < n | p ia title="bigop" href="cic:/fakeuri.def(1)"}/a(f i) + a title="leibnitz's equality" href="cic:/fakeuri.def(1)"=/a a title="bigop" href="cic:/fakeuri.def(1)"\big/a[op,nil]_{i < k | font class="Apple-style-span" color="#FF0000"if/font (a href="cic:/matita/arithmetics/nat/leb.fix(0,0,1)"leb/a n i) then a href="cic:/matita/basics/bool/bool.con(0,2,0)"false/a else p ia title="bigop" href="cic:/fakeuri.def(1)"}/a(f i). #k #n #p #B #nil #op #f #lenk (elim lenk) [@a href="cic:/matita/arithmetics/bigops/same_bigop.def(6)"same_bigop/a #i #lti // >(a href="cic:/matita/arithmetics/nat/not_le_to_leb_false.def(7)"not_le_to_leb_false/a …) /span class="autotactic"2span class="autotrace" trace a href="cic:/matita/arithmetics/nat/lt_to_not_le.def(7)"lt_to_not_le/a/span/span/ |#j #leup #Hind >a href="cic:/matita/arithmetics/bigops/bigop_Sfalse.def(3)"bigop_Sfalse/a >(a href="cic:/matita/arithmetics/nat/le_to_leb_true.def(7)"le_to_leb_true/a … leup) // @@ -100,8 +100,8 @@ qed. img class="anchor" src="icons/tick.png" id="pad_bigop1"theorem pad_bigop1: ∀k,n,p,B,nil,op.∀f:a href="cic:/matita/arithmetics/nat/nat.ind(1,0,0)"nat/a→B. n a title="natural 'less or equal to'" href="cic:/fakeuri.def(1)"≤/a k → (∀i. n a title="natural 'less or equal to'" href="cic:/fakeuri.def(1)"≤/a i → i a title="natural 'less than'" href="cic:/fakeuri.def(1)"</a k → p i a title="leibnitz's equality" href="cic:/fakeuri.def(1)"=/a a href="cic:/matita/basics/bool/bool.con(0,2,0)"false/a) → - \big[op,nil]_{i < n | p ia title="bigop" href="cic:/fakeuri.def(1)"}/a(f i) - a title="leibnitz's equality" href="cic:/fakeuri.def(1)"=/a \big[op,nil]_{i < k | p ia title="bigop" href="cic:/fakeuri.def(1)"}/a(f i). + a title="bigop" href="cic:/fakeuri.def(1)"\big/a[op,nil]_{i < n | p ia title="bigop" href="cic:/fakeuri.def(1)"}/a(f i) + a title="leibnitz's equality" href="cic:/fakeuri.def(1)"=/a a title="bigop" href="cic:/fakeuri.def(1)"\big/a[op,nil]_{i < k | p ia title="bigop" href="cic:/fakeuri.def(1)"}/a(f i). #k #n #p #B #nil #op #f #lenk (elim lenk) [#_ @a href="cic:/matita/arithmetics/bigops/same_bigop.def(6)"same_bigop/a #i #lti // |#j #leup #Hind #Hfalse >a href="cic:/matita/arithmetics/bigops/bigop_Sfalse.def(3)"bigop_Sfalse/a @@ -112,7 +112,7 @@ qed. qed. img class="anchor" src="icons/tick.png" id="bigop_false"theorem bigop_false: ∀n,B,nil,op.∀f:a href="cic:/matita/arithmetics/nat/nat.ind(1,0,0)"nat/a→B. - \big[op,nil]_{i < n | a href="cic:/matita/basics/bool/bool.con(0,2,0)"false/a a title="bigop" href="cic:/fakeuri.def(1)"}/a(f i) a title="leibnitz's equality" href="cic:/fakeuri.def(1)"=/a nil. + a title="bigop" href="cic:/fakeuri.def(1)"\big/a[op,nil]_{i < n | a href="cic:/matita/basics/bool/bool.con(0,2,0)"false/a a title="bigop" href="cic:/fakeuri.def(1)"}/a(f i) a title="leibnitz's equality" href="cic:/fakeuri.def(1)"=/a nil. #n #B #nil #op #f elim n // #n1 #Hind >a href="cic:/matita/arithmetics/bigops/bigop_Sfalse.def(3)"bigop_Sfalse/a // qed. @@ -126,8 +126,8 @@ qed. img class="anchor" src="icons/tick.png" id="pad_bigop_nil"theorem pad_bigop_nil: ∀k,n,p,B,nil.∀op:a href="cic:/matita/arithmetics/bigops/Aop.ind(1,0,2)"Aop/a B nil.∀f:a href="cic:/matita/arithmetics/nat/nat.ind(1,0,0)"nat/a→B. n a title="natural 'less or equal to'" href="cic:/fakeuri.def(1)"≤/a k → (∀i. n a title="natural 'less or equal to'" href="cic:/fakeuri.def(1)"≤/a i → i a title="natural 'less than'" href="cic:/fakeuri.def(1)"</a k → p i a title="leibnitz's equality" href="cic:/fakeuri.def(1)"=/a a href="cic:/matita/basics/bool/bool.con(0,2,0)"false/a a title="logical or" href="cic:/fakeuri.def(1)"∨/a f i a title="leibnitz's equality" href="cic:/fakeuri.def(1)"=/a nil) → - \big[op,nil]_{i < n | p ia title="bigop" href="cic:/fakeuri.def(1)"}/a(f i) - a title="leibnitz's equality" href="cic:/fakeuri.def(1)"=/a \big[op,nil]_{i < k | p ia title="bigop" href="cic:/fakeuri.def(1)"}/a(f i). + a title="bigop" href="cic:/fakeuri.def(1)"\big/a[op,nil]_{i < n | p ia title="bigop" href="cic:/fakeuri.def(1)"}/a(f i) + a title="leibnitz's equality" href="cic:/fakeuri.def(1)"=/a a title="bigop" href="cic:/fakeuri.def(1)"\big/a[op,nil]_{i < k | p ia title="bigop" href="cic:/fakeuri.def(1)"}/a(f i). #k #n #p #B #nil #op #f #lenk (elim lenk) [#_ @a href="cic:/matita/arithmetics/bigops/same_bigop.def(6)"same_bigop/a #i #lti // |#j #leup #Hind #Hfalse cases (a href="cic:/matita/basics/bool/true_or_false.def(1)"true_or_false/a (p j)) #Hpj @@ -143,8 +143,8 @@ qed. qed. img class="anchor" src="icons/tick.png" id="bigop_sum"theorem bigop_sum: ∀k1,k2,p1,p2,B.∀nil.∀op:a href="cic:/matita/arithmetics/bigops/Aop.ind(1,0,2)"Aop/a B nil.∀f,g:a href="cic:/matita/arithmetics/nat/nat.ind(1,0,0)"nat/a→B. -op (\big[op,nil]_{ia href="cic:/matita/arithmetics/bigops/nill.fix(0,2,2)"nill/a @a href="cic:/matita/arithmetics/bigops/same_bigop.def(6)"same_bigop/a #i #lti @@ -161,12 +161,12 @@ qed. qed. img class="anchor" src="icons/tick.png" id="bigop_I"theorem bigop_I: ∀n,p,B.∀nil.∀op:a href="cic:/matita/arithmetics/bigops/Aop.ind(1,0,2)"Aop/a B nil.∀f:a href="cic:/matita/arithmetics/nat/nat.ind(1,0,0)"nat/a→B. -\big[op,nil]_{i∈[a title="natural number" href="cic:/fakeuri.def(1)"0/a,n[ |p ia title="bigop" href="cic:/fakeuri.def(1)"}/a(f i) a title="leibnitz's equality" href="cic:/fakeuri.def(1)"=/a \big[op,nil]_{i < n|p ia title="bigop" href="cic:/fakeuri.def(1)"}/a(f i). +a title="bigop" href="cic:/fakeuri.def(1)"\big/a[op,nil]_{i∈[a title="natural number" href="cic:/fakeuri.def(1)"0/a,n[ |p ia title="natural minus" href="cic:/fakeuri.def(1)"}/a(f i) a title="leibnitz's equality" href="cic:/fakeuri.def(1)"=/a a title="bigop" href="cic:/fakeuri.def(1)"\big/a[op,nil]_{i < n|p i}(f i). #n #p #B #nil #op #f <a href="cic:/matita/arithmetics/nat/minus_n_O.def(3)"minus_n_O/a @a href="cic:/matita/arithmetics/bigops/same_bigop.def(6)"same_bigop/a // qed. img class="anchor" src="icons/tick.png" id="bigop_I_gen"theorem bigop_I_gen: ∀a,b,p,B.∀nil.∀op:a href="cic:/matita/arithmetics/bigops/Aop.ind(1,0,2)"Aop/a B nil.∀f:a href="cic:/matita/arithmetics/nat/nat.ind(1,0,0)"nat/a→B. a a title="natural 'less or equal to'" href="cic:/fakeuri.def(1)"≤/ab → -\big[op,nil]_{i∈[a,b[ |p ia title="bigop" href="cic:/fakeuri.def(1)"}/a(f i) a title="leibnitz's equality" href="cic:/fakeuri.def(1)"=/a \big[op,nil]_{i < b|a href="cic:/matita/arithmetics/nat/leb.fix(0,0,1)"leb/a a i a title="boolean and" href="cic:/fakeuri.def(1)"∧/a p ia title="bigop" href="cic:/fakeuri.def(1)"}/a(f i). +a title="bigop" href="cic:/fakeuri.def(1)"\big/a[op,nil]_{i∈[a,b[ |p i}(f i) a title="leibnitz's equality" href="cic:/fakeuri.def(1)"=/a a title="bigop" href="cic:/fakeuri.def(1)"\big/a[op,nil]_{i < b|a href="cic:/matita/arithmetics/nat/leb.fix(0,0,1)"leb/a a i a title="boolean and" href="cic:/fakeuri.def(1)"∧/a p i}(f i). #a #b elim b // -b #b #Hind #p #B #nil #op #f #lea cut (∀a,b. a a title="natural 'less or equal to'" href="cic:/fakeuri.def(1)"≤/a b → a href="cic:/matita/arithmetics/nat/nat.con(0,2,0)"S/a b a title="natural minus" href="cic:/fakeuri.def(1)"-/a a a title="leibnitz's equality" href="cic:/fakeuri.def(1)"=/a a href="cic:/matita/arithmetics/nat/nat.con(0,2,0)"S/a (b a title="natural minus" href="cic:/fakeuri.def(1)"-/aa)) [#a #b cases a // #a1 #lta1 normalize >a href="cic:/matita/arithmetics/nat/eq_minus_S_pred.def(4)"eq_minus_S_pred/a >a href="cic:/matita/arithmetics/nat/S_pred.def(3)"S_pred/a @@ -193,9 +193,9 @@ qed. img class="anchor" src="icons/tick.png" id="bigop_sumI"theorem bigop_sumI: ∀a,b,c,p,B.∀nil.∀op:a href="cic:/matita/arithmetics/bigops/Aop.ind(1,0,2)"Aop/a B nil.∀f:a href="cic:/matita/arithmetics/nat/nat.ind(1,0,0)"nat/a→B. a a title="natural 'less or equal to'" href="cic:/fakeuri.def(1)"≤/a b → b a title="natural 'less or equal to'" href="cic:/fakeuri.def(1)"≤/a c → -\big[op,nil]_{i∈[a,c[ |p ia title="bigop" href="cic:/fakeuri.def(1)"}/a(f i) a title="leibnitz's equality" href="cic:/fakeuri.def(1)"=/a - op (\big[op,nil]_{i ∈ [b,c[ |p ia title="bigop" href="cic:/fakeuri.def(1)"}/a(f i)) - \big[op,nil]_{i ∈ [a,b[ |p ia title="bigop" href="cic:/fakeuri.def(1)"}/a(f i). +a title="bigop" href="cic:/fakeuri.def(1)"\big/a[op,nil]_{i∈[a,c[ |p i}(f i) a title="leibnitz's equality" href="cic:/fakeuri.def(1)"=/a + op (a title="bigop" href="cic:/fakeuri.def(1)"\big/a[op,nil]_{i ∈ [b,c[ |p i}(f i)) + a title="bigop" href="cic:/fakeuri.def(1)"\big/a[op,nil]_{i ∈ [a,b[ |p i}(f i). #a #b # c #p #B #nil #op #f #leab #lebc >(a href="cic:/matita/arithmetics/nat/plus_minus_m_m.def(7)"plus_minus_m_m/a (ca title="natural minus" href="cic:/fakeuri.def(1)"-/aa) (ba title="natural minus" href="cic:/fakeuri.def(1)"-/aa)) in ⊢ (??%?); /span class="autotactic"2span class="autotrace" trace a href="cic:/matita/arithmetics/nat/monotonic_le_minus_l.def(9)"monotonic_le_minus_l/a/span/span/ >a href="cic:/matita/arithmetics/nat/minus_plus.def(13)"minus_plus/a >(a href="cic:/matita/arithmetics/nat/commutative_plus.def(5)"commutative_plus/a a) <a href="cic:/matita/arithmetics/nat/plus_minus_m_m.def(7)"plus_minus_m_m/a // @@ -206,24 +206,24 @@ a a title="natural 'less or equal to'" href="cic:/fakeuri.def(1)"≤/a b → qed. img class="anchor" src="icons/tick.png" id="bigop_a"theorem bigop_a: ∀a,b,B.∀nil.∀op:a href="cic:/matita/arithmetics/bigops/Aop.ind(1,0,2)"Aop/a B nil.∀f:a href="cic:/matita/arithmetics/nat/nat.ind(1,0,0)"nat/a→B. a a title="natural 'less or equal to'" href="cic:/fakeuri.def(1)"≤/a b → -\big[op,nil]_{i∈[a,a href="cic:/matita/arithmetics/nat/nat.con(0,2,0)"S/a b[ a title="bigop" href="cic:/fakeuri.def(1)"}/a(f i) a title="leibnitz's equality" href="cic:/fakeuri.def(1)"=/a - op (\big[op,nil]_{i ∈ [a,b[ a title="bigop" href="cic:/fakeuri.def(1)"}/a(f (a href="cic:/matita/arithmetics/nat/nat.con(0,2,0)"S/a i))) (f a). +a title="bigop" href="cic:/fakeuri.def(1)"\big/a[op,nil]_{i∈[a,a href="cic:/matita/arithmetics/nat/nat.con(0,2,0)"S/a b[ }(f i) a title="leibnitz's equality" href="cic:/fakeuri.def(1)"=/a + op (a title="bigop" href="cic:/fakeuri.def(1)"\big/a[op,nil]_{i ∈ [a,b[ }(f (a href="cic:/matita/arithmetics/nat/nat.con(0,2,0)"S/a i))) (f a). #a #b #B #nil #op #f #leab >(a href="cic:/matita/arithmetics/bigops/bigop_sumI.def(14)"bigop_sumI/a a (a href="cic:/matita/arithmetics/nat/nat.con(0,2,0)"S/a a) (a href="cic:/matita/arithmetics/nat/nat.con(0,2,0)"S/a b)) [|@a href="cic:/matita/arithmetics/nat/le_S_S.def(2)"le_S_S/a //|//] @a href="cic:/matita/basics/logic/eq_f2.def(3)"eq_f2/a [@a href="cic:/matita/arithmetics/bigops/same_bigop.def(6)"same_bigop/a // |<a href="cic:/matita/arithmetics/nat/minus_Sn_n.def(4)"minus_Sn_n/a normalize @a href="cic:/matita/arithmetics/bigops/nilr.fix(0,2,2)"nilr/a] qed. img class="anchor" src="icons/tick.png" id="bigop_0"theorem bigop_0: ∀n,B.∀nil.∀op:a href="cic:/matita/arithmetics/bigops/Aop.ind(1,0,2)"Aop/a B nil.∀f:a href="cic:/matita/arithmetics/nat/nat.ind(1,0,0)"nat/a→B. -\big[op,nil]_{i < a href="cic:/matita/arithmetics/nat/nat.con(0,2,0)"S/a na title="bigop" href="cic:/fakeuri.def(1)"}/a(f i) a title="leibnitz's equality" href="cic:/fakeuri.def(1)"=/a - op (\big[op,nil]_{i < na title="bigop" href="cic:/fakeuri.def(1)"}/a(f (a href="cic:/matita/arithmetics/nat/nat.con(0,2,0)"S/a i))) (f a title="natural number" href="cic:/fakeuri.def(1)"0/a). +a title="bigop" href="cic:/fakeuri.def(1)"\big/a[op,nil]_{i < a href="cic:/matita/arithmetics/nat/nat.con(0,2,0)"S/a n}(f i) a title="leibnitz's equality" href="cic:/fakeuri.def(1)"=/a + op (a title="bigop" href="cic:/fakeuri.def(1)"\big/a[op,nil]_{i < n}(f (a href="cic:/matita/arithmetics/nat/nat.con(0,2,0)"S/a i))) (f a title="natural number" href="cic:/fakeuri.def(1)"0/a). #n #B #nil #op #f <a href="cic:/matita/arithmetics/bigops/bigop_I.def(7)"bigop_I/a >a href="cic:/matita/arithmetics/bigops/bigop_a.def(15)"bigop_a/a [|//] @a href="cic:/matita/basics/logic/eq_f2.def(3)"eq_f2/a [|//] <a href="cic:/matita/arithmetics/nat/minus_n_O.def(3)"minus_n_O/a @a href="cic:/matita/arithmetics/bigops/same_bigop.def(6)"same_bigop/a // qed. img class="anchor" src="icons/tick.png" id="bigop_prod"theorem bigop_prod: ∀k1,k2,p1,p2,B.∀nil.∀op:a href="cic:/matita/arithmetics/bigops/Aop.ind(1,0,2)"Aop/a B nil.∀f: a href="cic:/matita/arithmetics/nat/nat.ind(1,0,0)"nat/a →a href="cic:/matita/arithmetics/nat/nat.ind(1,0,0)"nat/a → B. -\big[op,nil]_{xa href="cic:/matita/arithmetics/bigops/bigop_Strue.def(3)"bigop_Strue/a // >a href="cic:/matita/arithmetics/bigops/bigop_Strue.def(3)"bigop_Strue/a // >a href="cic:/matita/arithmetics/bigops/bigop_Strue.def(3)"bigop_Strue/a // @@ -256,8 +256,8 @@ qed. img class="anchor" src="icons/tick.png" id="bigop_diff"lemma bigop_diff: ∀p,B.∀nil.∀op:a href="cic:/matita/arithmetics/bigops/ACop.ind(1,0,2)"ACop/a B nil.∀f:a href="cic:/matita/arithmetics/nat/nat.ind(1,0,0)"nat/a → B.∀i,n. i a title="natural 'less than'" href="cic:/fakeuri.def(1)"</a n → p i a title="leibnitz's equality" href="cic:/fakeuri.def(1)"=/a a href="cic:/matita/basics/bool/bool.con(0,1,0)"true/a → - \big[op,nil]_{xa href="cic:/matita/arithmetics/bigops/bigop_prod.def(15)"bigop_prod/a >a href="cic:/matita/arithmetics/bigops/bigop_prod.def(15)"bigop_prod/a @a href="cic:/matita/arithmetics/bigops/bigop_iso.def(9)"bigop_iso/a %{(λi.(ia title="natural remainder" href="cic:/fakeuri.def(1)"\mod/a m)a title="natural times" href="cic:/fakeuri.def(1)"*/an a title="natural plus" href="cic:/fakeuri.def(1)"+/a ia title="natural divide" href="cic:/fakeuri.def(1)"//am)} %{(λi.(ia title="natural remainder" href="cic:/fakeuri.def(1)"\mod/a n)a title="natural times" href="cic:/fakeuri.def(1)"*/am a title="natural plus" href="cic:/fakeuri.def(1)"+/a ia title="natural divide" href="cic:/fakeuri.def(1)"//an)} % @@ -407,8 +407,8 @@ qed. img class="anchor" src="icons/tick.png" id="bigop_distr"theorem bigop_distr: ∀n,p,B,nil.∀R:a href="cic:/matita/arithmetics/bigops/Dop.ind(1,0,2)"Dop/a B nil.\forall f,a. let aop \def a href="cic:/matita/arithmetics/bigops/sum.fix(0,2,4)"sum/a B nil R in let mop \def a href="cic:/matita/arithmetics/bigops/prod.fix(0,2,4)"prod/a B nil R in - mop a \big[aop,nil]_{ia href="cic:/matita/arithmetics/bigops/bigop_Strue.def(3)"bigop_Strue/a // >a href="cic:/matita/arithmetics/bigops/bigop_Strue.def(3)"bigop_Strue/a // >(a href="cic:/matita/arithmetics/bigops/distr.fix(0,2,5)"distr/a B nil R) >Hind // diff --git a/weblib/arithmetics/min_max.ma b/weblib/arithmetics/min_max.ma index 3b93593b6..38f7b4f1a 100644 --- a/weblib/arithmetics/min_max.ma +++ b/weblib/arithmetics/min_max.ma @@ -57,4 +57,4 @@ qed. ] qed. - + \ No newline at end of file diff --git a/weblib/ricciott/cpp2012.ma b/weblib/ricciott/cpp2012.ma new file mode 100644 index 000000000..bac60d213 --- /dev/null +++ b/weblib/ricciott/cpp2012.ma @@ -0,0 +1,43 @@ +(* new script *) + +include "basics/logic.ma". +include "basics/types.ma". +include "basics/bool.ma". +include "arithmetics/nat.ma". +include "basics/list.ma". + +axiom Vector : Type[0] → nat → Type[0]. +axiom tape : Type[0] → Type[0]. +axiom current : ∀T:Type[0]. tape T → option T. +axiom vec : ∀T:Type[0].∀n:nat.Vector T n → list T. +coercion vec : ∀T:Type[0].∀n:nat.∀v:Vector T n.list T ≝ vec on _v:Vector ?? to list ?. +axiom niltape : ∀T.tape T. +axiom midtape : ∀T.list T → T → list T → tape T. +axiom change_vec : ∀T,n.Vector T n → T → nat → Vector T n. +axiom move : Type[0]. +axiom R : move. +axiom tape_move : ∀T.tape T → option (T × move) → tape T. +axiom memb: ∀T.T → list T → bool. +interpretation "boolean membership" 'mem a l = (memb ? a l). +axiom right : ∀T.tape T → list T. + + +definition R_match_step_true ≝ + λsrc,dst,sig,n,is_startc,is_endc.λint,outt: Vector (tape sig) (S n). + ∀s.current sig (nth src (tape sig) int (niltape sig)) = Some ? s → + current sig (nth dst (tape sig) int (niltape sig)) ≠ None ? ∧ + (is_startc s = true → + (∀c.c ∈ right ? (nth src (tape sig) int (niltape sig)) = true → is_startc c = false) → + (∀s1.current sig (nth dst (tape sig) int (niltape sig)) = Some ? s1 → s ≠ s1 → + outt = change_vec ?? int + (tape_move … (nth dst ? int (niltape ?)) (Some ? 〈s1,R〉)) dst ∧ is_endc s = false) ∧ + (∀ls,x,xs,ci,rs,ls0,rs0. + nth src ? int (niltape ?) = midtape ls x (xs@ci::rs) → + nth dst ? int (niltape ?) = midtape sig ls0 x (xs@rs0) → + (∀c0. memb ? c0 (x::xs) = true → is_endc c0 = false) → + is_endc ci = false ∧ rs0 ≠ [] ∧ + ∀cj,rs1.rs0 = cj::rs1 → + ci ≠ cj → + (outt = change_vec ?? int + (tape_move … (nth dst ? int (niltape ?)) (Some ? 〈x,R〉)) dst ∧ is_endc ci = false))). + diff --git a/weblib/ricciott/test.ma b/weblib/ricciott/test.ma new file mode 100644 index 000000000..a2a0c8622 --- /dev/null +++ b/weblib/ricciott/test.ma @@ -0,0 +1,3 @@ +(* new script *) + +include "While/syntax.ma".