X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Fsoftware%2Fmatita%2Fcontribs%2Fdama%2Fdama%2Fsupremum.ma;h=a492c8f3299e8255c0b86be2605972da857b3310;hb=910c252965fe17d6b5af92e4658e7d02bac82d58;hp=e6b9dbbc629e5bfb5d851617ddc34cb7ee00f7d9;hpb=7af9d84f465b5f4b609b08ae914681526d12480a;p=helm.git diff --git a/helm/software/matita/contribs/dama/dama/supremum.ma b/helm/software/matita/contribs/dama/dama/supremum.ma index e6b9dbbc6..a492c8f32 100644 --- a/helm/software/matita/contribs/dama/dama/supremum.ma +++ b/helm/software/matita/contribs/dama/dama/supremum.ma @@ -12,9 +12,11 @@ (* *) (**************************************************************************) -include "sequence.ma". -include "ordered_set.ma". + include "datatypes/constructors.ma". +include "nat/plus.ma". +include "nat_ordered_set.ma". +include "sequence.ma". (* Definition 2.4 *) definition upper_bound ≝ λO:ordered_set.λa:sequence O.λu:O.∀n:nat.a n ≤ u. @@ -28,40 +30,38 @@ definition infimum ≝ definition increasing ≝ λO:ordered_set.λa:sequence O.∀n:nat.a n ≤ a (S n). definition decreasing ≝ λO:ordered_set.λa:sequence O.∀n:nat.a (S n) ≤ a n. -notation < "x \nbsp 'is_upper_bound' \nbsp s" non associative with precedence 50 +notation < "x \nbsp 'is_upper_bound' \nbsp s" non associative with precedence 45 for @{'upper_bound $s $x}. -notation < "x \nbsp 'is_lower_bound' \nbsp s" non associative with precedence 50 +notation < "x \nbsp 'is_lower_bound' \nbsp s" non associative with precedence 45 for @{'lower_bound $s $x}. -notation < "s \nbsp 'is_increasing'" non associative with precedence 50 +notation < "s \nbsp 'is_increasing'" non associative with precedence 45 for @{'increasing $s}. -notation < "s \nbsp 'is_decreasing'" non associative with precedence 50 +notation < "s \nbsp 'is_decreasing'" non associative with precedence 45 for @{'decreasing $s}. -notation < "x \nbsp 'is_supremum' \nbsp s" non associative with precedence 50 +notation < "x \nbsp 'is_supremum' \nbsp s" non associative with precedence 45 for @{'supremum $s $x}. -notation < "x \nbsp 'is_infimum' \nbsp s" non associative with precedence 50 +notation < "x \nbsp 'is_infimum' \nbsp s" non associative with precedence 45 for @{'infimum $s $x}. -notation > "x 'is_upper_bound' s" non associative with precedence 50 +notation > "x 'is_upper_bound' s" non associative with precedence 45 for @{'upper_bound $s $x}. -notation > "x 'is_lower_bound' s" non associative with precedence 50 +notation > "x 'is_lower_bound' s" non associative with precedence 45 for @{'lower_bound $s $x}. -notation > "s 'is_increasing'" non associative with precedence 50 +notation > "s 'is_increasing'" non associative with precedence 45 for @{'increasing $s}. -notation > "s 'is_decreasing'" non associative with precedence 50 +notation > "s 'is_decreasing'" non associative with precedence 45 for @{'decreasing $s}. -notation > "x 'is_supremum' s" non associative with precedence 50 +notation > "x 'is_supremum' s" non associative with precedence 45 for @{'supremum $s $x}. -notation > "x 'is_infimum' s" non associative with precedence 50 +notation > "x 'is_infimum' s" non associative with precedence 45 for @{'infimum $s $x}. interpretation "Ordered set upper bound" 'upper_bound s x = (upper_bound _ s x). interpretation "Ordered set lower bound" 'lower_bound s x = (lower_bound _ s x). -interpretation "Ordered set increasing" 'increasing s = (increasing _ s). -interpretation "Ordered set decreasing" 'decreasing s = (decreasing _ s). -interpretation "Ordered set strong sup" 'supremum s x = (supremum _ s x). -interpretation "Ordered set strong inf" 'infimum s x = (infimum _ s x). - -include "bishop_set.ma". +interpretation "Ordered set increasing" 'increasing s = (increasing _ s). +interpretation "Ordered set decreasing" 'decreasing s = (decreasing _ s). +interpretation "Ordered set strong sup" 'supremum s x = (supremum _ s x). +interpretation "Ordered set strong inf" 'infimum s x = (infimum _ s x). lemma uniq_supremum: ∀O:ordered_set.∀s:sequence O.∀t1,t2:O. @@ -87,14 +87,12 @@ intros 7 (C s u Hu v Hv H); cases Hu (_ H1); clear Hu; cases (H1 ? H) (w Hw); apply Hv; assumption; qed. - (* Lemma 2.6 *) definition strictly_increasing ≝ λC:ordered_set.λa:sequence C.∀n:nat.a (S n) ≰ a n. definition strictly_decreasing ≝ λC:ordered_set.λa:sequence C.∀n:nat.a n ≰ a (S n). - notation < "s \nbsp 'is_strictly_increasing'" non associative with precedence 50 for @{'strictly_increasing $s}. notation > "s 'is_strictly_increasing'" non associative with precedence 50 @@ -116,21 +114,17 @@ definition downarrow ≝ λC:ordered_set.λs:sequence C.λu:C. s is_decreasing ∧ u is_infimum s. -notation < "a \uparrow \nbsp u" non associative with precedence 50 for @{'sup_inc $a $u}. -notation > "a \uparrow u" non associative with precedence 50 for @{'sup_inc $a $u}. +notation < "a \uparrow \nbsp u" non associative with precedence 45 for @{'sup_inc $a $u}. +notation > "a \uparrow u" non associative with precedence 45 for @{'sup_inc $a $u}. interpretation "Ordered set uparrow" 'sup_inc s u = (uparrow _ s u). -notation < "a \downarrow \nbsp u" non associative with precedence 50 for @{'inf_dec $a $u}. -notation > "a \downarrow u" non associative with precedence 50 for @{'inf_dec $a $u}. +notation < "a \downarrow \nbsp u" non associative with precedence 45 for @{'inf_dec $a $u}. +notation > "a \downarrow u" non associative with precedence 45 for @{'inf_dec $a $u}. interpretation "Ordered set downarrow" 'inf_dec s u = (downarrow _ s u). -include "nat/plus.ma". -include "nat_ordered_set.ma". - -alias symbol "nleq" = "Ordered set excess". -alias symbol "leq" = "Ordered set less or equal than". lemma trans_increasing: - ∀C:ordered_set.∀a:sequence C.a is_increasing → ∀n,m:nat_ordered_set. n ≤ m → a n ≤ a m. + ∀C:ordered_set.∀a:sequence C.a is_increasing → + ∀n,m:nat_ordered_set. n ≤ m → a n ≤ a m. intros 5 (C a Hs n m); elim m; [ rewrite > (le_n_O_to_eq n (not_lt_to_le O n H)); intro X; cases (os_coreflexive ?? X);] @@ -141,7 +135,8 @@ cases (le_to_or_lt_eq ?? (not_lt_to_le (S n1) n H1)); clear H1; qed. lemma trans_decreasing: - ∀C:ordered_set.∀a:sequence C.a is_decreasing → ∀n,m:nat_ordered_set. n ≤ m → a m ≤ a n. + ∀C:ordered_set.∀a:sequence C.a is_decreasing → + ∀n,m:nat_ordered_set. n ≤ m → a m ≤ a n. intros 5 (C a Hs n m); elim m; [ rewrite > (le_n_O_to_eq n (not_lt_to_le O n H)); intro X; cases (os_coreflexive ?? X);] @@ -152,7 +147,8 @@ cases (le_to_or_lt_eq ?? (not_lt_to_le (S n1) n H1)); clear H1; qed. lemma trans_increasing_exc: - ∀C:ordered_set.∀a:sequence C.a is_increasing → ∀n,m:nat_ordered_set. m ≰ n → a n ≤ a m. + ∀C:ordered_set.∀a:sequence C.a is_increasing → + ∀n,m:nat_ordered_set. m ≰ n → a n ≤ a m. intros 5 (C a Hs n m); elim m; [cases (not_le_Sn_O n H);] intro; apply H; [1: change in n1 with (os_carr nat_ordered_set); (* canonical structures *) @@ -164,7 +160,8 @@ intro; apply H; qed. lemma trans_decreasing_exc: - ∀C:ordered_set.∀a:sequence C.a is_decreasing → ∀n,m:nat_ordered_set. m ≰ n → a m ≤ a n . + ∀C:ordered_set.∀a:sequence C.a is_decreasing → + ∀n,m:nat_ordered_set. m ≰ n → a m ≤ a n . intros 5 (C a Hs n m); elim m; [cases (not_le_Sn_O n H);] intro; apply H; [1: change in n1 with (os_carr nat_ordered_set); (* canonical structures *) @@ -175,6 +172,7 @@ intro; apply H; cases (Hs n1); assumption;] qed. +alias symbol "exists" = "CProp exists". lemma strictly_increasing_reaches: ∀C:ordered_set.∀m:sequence nat_ordered_set. m is_strictly_increasing → ∀w.∃t.m t ≰ w. @@ -193,7 +191,7 @@ qed. lemma selection_uparrow: ∀C:ordered_set.∀m:sequence nat_ordered_set.m is_strictly_increasing → - ∀a:sequence C.∀u.a ↑ u → (λx.a (m x)) ↑ u. + ∀a:sequence C.∀u.a ↑ u → ⌊x,a (m x)⌋ ↑ u. intros (C m Hm a u Ha); cases Ha (Ia Su); cases Su (Uu Hu); repeat split; [1: intro n; simplify; apply trans_increasing_exc; [assumption] apply (Hm n); |2: intro n; simplify; apply Uu; @@ -205,7 +203,7 @@ qed. lemma selection_downarrow: ∀C:ordered_set.∀m:sequence nat_ordered_set.m is_strictly_increasing → - ∀a:sequence C.∀u.a ↓ u → (λx.a (m x)) ↓ u. + ∀a:sequence C.∀u.a ↓ u → ⌊x,a (m x)⌋ ↓ u. intros (C m Hm a u Ha); cases Ha (Ia Su); cases Su (Uu Hu); repeat split; [1: intro n; simplify; apply trans_decreasing_exc; [assumption] apply (Hm n); |2: intro n; simplify; apply Uu; @@ -213,120 +211,79 @@ intros (C m Hm a u Ha); cases Ha (Ia Su); cases Su (Uu Hu); repeat split; cases (strictly_increasing_reaches C ? Hm w); exists [apply w1]; cases (os_cotransitive ??? (a (m w1)) H); [assumption] cases (trans_decreasing_exc C ? Ia ?? H1); assumption;] -qed. +qed. (* Definition 2.7 *) -alias id "ExT23" = "cic:/matita/dama/cprop_connectives/exT23.ind#xpointer(1/1)". definition order_converge ≝ λO:ordered_set.λa:sequence O.λx:O. - ExT23 (sequence O) (λl.l ↑ x) (λu.u ↓ x) - (λl,u.∀i:nat. (l i) is_infimum (λw.a (w+i)) ∧ (u i) is_supremum (λw.a (w+i))). + exT23 (sequence O) (λl.l ↑ x) (λu.u ↓ x) + (λl,u:sequence O.∀i:nat. (l i) is_infimum ⌊w,a (w+i)⌋ ∧ + (u i) is_supremum ⌊w,a (w+i)⌋). -notation < "a \nbsp (\circ \atop (\horbar\triangleright)) \nbsp x" non associative with precedence 50 +notation < "a \nbsp (\cir \atop (\horbar\triangleright)) \nbsp x" non associative with precedence 45 for @{'order_converge $a $x}. -notation > "a 'order_converges' x" non associative with precedence 50 +notation > "a 'order_converges' x" non associative with precedence 45 for @{'order_converge $a $x}. interpretation "Order convergence" 'order_converge s u = (order_converge _ s u). (* Definition 2.8 *) +alias symbol "and" = "constructive and". +definition segment ≝ λO:ordered_set.λa,b:O.λx:O.(x ≤ b) ∧ (a ≤ x). -definition segment ≝ λO:ordered_set.λa,b:O.λx:O. - (cic:/matita/logic/connectives/And.ind#xpointer(1/1) (x ≤ b) (a ≤ x)). - -notation "[a,b]" non associative with precedence 50 - for @{'segment $a $b}. +notation "[a,b]" left associative with precedence 70 for @{'segment $a $b}. interpretation "Ordered set sergment" 'segment a b = (segment _ a b). -notation "hvbox(x \in break [a,b])" non associative with precedence 50 - for @{'segment2 $a $b $x}. -interpretation "Ordered set sergment in" 'segment2 a b x= (segment _ a b x). - -coinductive sigma (A:Type) (P:A→Prop) : Type ≝ sig_in : ∀x.P x → sigma A P. - -definition pi1 : ∀A.∀P.sigma A P → A ≝ λA,P,s.match s with [sig_in x _ ⇒ x]. - -interpretation "sigma pi1" 'pi1 x = (pi1 _ _ x). - -interpretation "Type exists" 'exists \eta.x = - (cic:/matita/dama/supremum/sigma.ind#xpointer(1/1) _ x). +notation "hvbox(x \in break [a,b])" non associative with precedence 45 + for @{'segment_in $a $b $x}. +interpretation "Ordered set sergment in" 'segment_in a b x= (segment _ a b x). lemma segment_ordered_set: ∀O:ordered_set.∀u,v:O.ordered_set. intros (O u v); apply (mk_ordered_set (∃x.x ∈ [u,v])); -[1: intros (x y); apply (fst x ≰ fst y); +[1: intros (x y); apply (\fst x ≰ \fst y); |2: intro x; cases x; simplify; apply os_coreflexive; |3: intros 3 (x y z); cases x; cases y ; cases z; simplify; apply os_cotransitive] qed. -notation "hvbox({[a, break b]})" non associative with precedence 80 +notation "hvbox({[a, break b]})" non associative with precedence 90 for @{'segment_set $a $b}. interpretation "Ordered set segment" 'segment_set a b = - (segment_ordered_set _ a b). + (segment_ordered_set _ a b). (* Lemma 2.9 *) lemma segment_preserves_supremum: ∀O:ordered_set.∀l,u:O.∀a:sequence {[l,u]}.∀x:{[l,u]}. - (λn.fst (a n)) is_increasing ∧ - (fst x) is_supremum (λn.fst (a n)) → a ↑ x. + ⌊n,\fst (a n)⌋ is_increasing ∧ + (\fst x) is_supremum ⌊n,\fst (a n)⌋ → a ↑ x. intros; split; cases H; clear H; [1: apply H1; |2: cases H2; split; clear H2; [1: apply H; - |2: clear H; intro y0; apply (H3 (fst y0));]] + |2: clear H; intro y0; apply (H3 (\fst y0));]] qed. lemma segment_preserves_infimum: ∀O:ordered_set.∀l,u:O.∀a:sequence {[l,u]}.∀x:{[l,u]}. - (λn.fst (a n)) is_decreasing ∧ - (fst x) is_infimum (λn.fst (a n)) → a ↓ x. + ⌊n,\fst (a n)⌋ is_decreasing ∧ + (\fst x) is_infimum ⌊n,\fst (a n)⌋ → a ↓ x. intros; split; cases H; clear H; [1: apply H1; |2: cases H2; split; clear H2; [1: apply H; - |2: clear H; intro y0; apply (H3 (fst y0));]] + |2: clear H; intro y0; apply (H3 (\fst y0));]] qed. - (* Definition 2.10 *) -coinductive pair (A,B:Type) : Type ≝ prod : ∀a:A.∀b:B.pair A B. -definition first : ∀A.∀P.pair A P → A ≝ λA,P,s.match s with [prod x _ ⇒ x]. -definition second : ∀A.∀P.pair A P → P ≝ λA,P,s.match s with [prod _ y ⇒ y]. - -interpretation "pair pi1" 'pi1 x = (first _ _ x). -interpretation "pair pi2" 'pi2 x = (second _ _ x). - -notation "hvbox(\langle a, break b\rangle)" non associative with precedence 91 for @{ 'pair $a $b}. -interpretation "pair" 'pair a b = (prod _ _ a b). - -interpretation "prod" 'product a b = (pair a b). - -lemma square_ordered_set: ordered_set → ordered_set. -intro O; -apply (mk_ordered_set (O × O)); -[1: intros (x y); apply (fst x ≰ fst y ∨ snd x ≰ snd y); -|2: intro x0; cases x0 (x y); clear x0; simplify; intro H; - cases H (X X); apply (os_coreflexive ?? X); -|3: intros 3 (x0 y0 z0); cases x0 (x1 x2); cases y0 (y1 y2) ; cases z0 (z1 z2); - clear x0 y0 z0; simplify; intro H; cases H (H1 H1); clear H; - [1: cases (os_cotransitive ??? z1 H1); [left; left|right;left]assumption; - |2: cases (os_cotransitive ??? z2 H1); [left;right|right;right]assumption]] -qed. - -notation < "s 2 \atop \nleq" non associative with precedence 90 - for @{ 'square $s }. -notation > "s 'square'" non associative with precedence 90 - for @{ 'square $s }. -interpretation "ordered set square" 'square s = (square_ordered_set s). - +alias symbol "square" = "ordered set square". +alias symbol "pi2" = "pair pi2". +alias symbol "pi1" = "pair pi1". definition square_segment ≝ - λO:ordered_set.λa,b:O.λx:square_ordered_set O. - (cic:/matita/logic/connectives/And.ind#xpointer(1/1) - (cic:/matita/logic/connectives/And.ind#xpointer(1/1) (fst x ≤ b) (a ≤ fst x)) - (cic:/matita/logic/connectives/And.ind#xpointer(1/1) (snd x ≤ b) (a ≤ snd x))). + λO:ordered_set.λa,b:O.λx:O square. + And4 (\fst x ≤ b) (a ≤ \fst x) (\snd x ≤ b) (a ≤ \snd x). definition convex ≝ λO:ordered_set.λU:O square → Prop. - ∀p.U p → fst p ≤ snd p → ∀y. square_segment ? (fst p) (snd p) y → U y. + ∀p.U p → \fst p ≤ \snd p → ∀y. square_segment ? (\fst p) (\snd p) y → U y. (* Definition 2.11 *) definition upper_located ≝ @@ -337,18 +294,18 @@ definition lower_located ≝ λO:ordered_set.λa:sequence O.∀x,y:O. x ≰ y → (∃i:nat.x ≰ a i) ∨ (∃b:O.b≰y ∧ ∀i:nat.b ≤ a i). -notation < "s \nbsp 'is_upper_located'" non associative with precedence 50 +notation < "s \nbsp 'is_upper_located'" non associative with precedence 45 for @{'upper_located $s}. -notation > "s 'is_upper_located'" non associative with precedence 50 +notation > "s 'is_upper_located'" non associative with precedence 45 for @{'upper_located $s}. -interpretation "Ordered set upper locatedness" 'upper_located s = +interpretation "Ordered set upper locatedness" 'upper_located s = (upper_located _ s). -notation < "s \nbsp 'is_lower_located'" non associative with precedence 50 +notation < "s \nbsp 'is_lower_located'" non associative with precedence 45 for @{'lower_located $s}. -notation > "s 'is_lower_located'" non associative with precedence 50 +notation > "s 'is_lower_located'" non associative with precedence 45 for @{'lower_located $s}. -interpretation "Ordered set lower locatedness" 'lower_located s = +interpretation "Ordered set lower locatedness" 'lower_located s = (lower_located _ s). (* Lemma 2.12 *)