From 80ea6f314e89d9d280338c41860cb04949319629 Mon Sep 17 00:00:00 2001 From: Enrico Tassi Date: Tue, 15 Jul 2008 17:01:14 +0000 Subject: [PATCH] more notation moved to core notation, unification of duplicated CProp connectives --- .../matita/contribs/dama/dama/bishop_set.ma | 8 +- .../matita/contribs/dama/dama/depends | 13 ++- .../matita/contribs/dama/dama/depends.png | Bin 35260 -> 34866 bytes .../contribs/dama/dama/models/list_support.ma | 2 +- .../models/nat_dedekind_sigma_complete.ma | 6 +- .../dama/dama/models/nat_ordered_uniform.ma | 2 +- .../contribs/dama/dama/models/nat_uniform.ma | 2 +- .../contribs/dama/dama/models/q_bars.ma | 2 +- .../contribs/dama/dama/models/q_support.ma | 5 +- .../contribs/dama/dama/nat_ordered_set.ma | 3 +- .../matita/contribs/dama/dama/ordered_set.ma | 6 +- .../contribs/dama/dama/ordered_uniform.ma | 6 +- .../contribs/dama/dama/russell_support.ma | 2 +- .../matita/contribs/dama/dama/supremum.ma | 12 +-- .../matita/contribs/dama/dama/uniform.ma | 18 ++-- helm/software/matita/core_notation.moo | 57 ++++++++++- .../software/matita/library/algebra/groups.ma | 26 ++--- .../matita/library/algebra/monoids.ma | 10 +- .../matita/library/algebra/semigroups.ma | 7 +- .../matita/library/datatypes/subsets.ma | 47 +++++++++ .../matita/library/demo/formal_topology.ma | 96 +++--------------- helm/software/matita/library/depends | 5 +- .../library/higher_order_defs/functions.ma | 4 - .../logic}/cprop_connectives.ma | 3 + 24 files changed, 170 insertions(+), 172 deletions(-) create mode 100644 helm/software/matita/library/datatypes/subsets.ma rename helm/software/matita/{contribs/dama/dama => library/logic}/cprop_connectives.ma (97%) diff --git a/helm/software/matita/contribs/dama/dama/bishop_set.ma b/helm/software/matita/contribs/dama/dama/bishop_set.ma index 8cb77ec24..64ae4495d 100644 --- a/helm/software/matita/contribs/dama/dama/bishop_set.ma +++ b/helm/software/matita/contribs/dama/dama/bishop_set.ma @@ -23,9 +23,6 @@ record bishop_set: Type ≝ { bs_cotransitive: cotransitive ? bs_apart }. -notation "hvbox(a break # b)" non associative with precedence 45 - for @{ 'apart $a $b}. - interpretation "bishop set apartness" 'apart x y = (bs_apart _ x y). definition bishop_set_of_ordered_set: ordered_set → bishop_set. @@ -41,9 +38,6 @@ qed. (* Definition 2.2 (2) *) definition eq ≝ λA:bishop_set.λa,b:A. ¬ (a # b). -notation "hvbox(a break \approx b)" non associative with precedence 45 - for @{ 'napart $a $b}. - interpretation "Bishop set alikeness" 'napart a b = (eq _ a b). lemma eq_reflexive:∀E:bishop_set. reflexive ? (eq E). @@ -97,7 +91,7 @@ qed. definition bs_subset ≝ λO:bishop_set.λP,Q:O→Prop.∀x:O.P x → Q x. -interpretation "bishop set subset" 'subset a b = (bs_subset _ a b). +interpretation "bishop set subset" 'subseteq a b = (bs_subset _ a b). definition square_bishop_set : bishop_set → bishop_set. intro S; apply (mk_bishop_set (S × S)); diff --git a/helm/software/matita/contribs/dama/dama/depends b/helm/software/matita/contribs/dama/dama/depends index 419a80369..124d9017c 100644 --- a/helm/software/matita/contribs/dama/dama/depends +++ b/helm/software/matita/contribs/dama/dama/depends @@ -1,8 +1,7 @@ ordered_uniform.ma uniform.ma -cprop_connectives.ma datatypes/constructors.ma logic/equality.ma -russell_support.ma cprop_connectives.ma nat/nat.ma +russell_support.ma logic/cprop_connectives.ma nat/nat.ma lebesgue.ma property_exhaustivity.ma sandwich.ma -ordered_set.ma cprop_connectives.ma +ordered_set.ma logic/cprop_connectives.ma bishop_set.ma ordered_set.ma bishop_set_rewrite.ma bishop_set.ma sandwich.ma ordered_uniform.ma @@ -16,9 +15,9 @@ models/nat_order_continuous.ma models/nat_dedekind_sigma_complete.ma models/nat_ models/nat_ordered_uniform.ma bishop_set_rewrite.ma models/nat_uniform.ma ordered_uniform.ma models/q_function.ma Q/q/qtimes.ma models/q_bars.ma models/discrete_uniformity.ma bishop_set_rewrite.ma uniform.ma -models/list_support.ma cprop_connectives.ma list/list.ma nat/le_arith.ma nat/minus.ma -models/q_bars.ma cprop_connectives.ma models/list_support.ma models/q_support.ma nat_ordered_set.ma -models/q_support.ma Q/q/qplus.ma Q/q/qtimes.ma cprop_connectives.ma +models/list_support.ma list/list.ma logic/cprop_connectives.ma nat/le_arith.ma nat/minus.ma +models/q_bars.ma logic/cprop_connectives.ma models/list_support.ma models/q_support.ma nat_ordered_set.ma +models/q_support.ma Q/q/qplus.ma Q/q/qtimes.ma logic/cprop_connectives.ma models/nat_lebesgue.ma lebesgue.ma models/nat_order_continuous.ma models/q_shift.ma models/nat_dedekind_sigma_complete.ma models/nat_uniform.ma nat/le_arith.ma russell_support.ma supremum.ma @@ -28,7 +27,7 @@ Q/q/qplus.ma Q/q/qtimes.ma datatypes/constructors.ma list/list.ma -logic/equality.ma +logic/cprop_connectives.ma nat/compare.ma nat/le_arith.ma nat/minus.ma diff --git a/helm/software/matita/contribs/dama/dama/depends.png b/helm/software/matita/contribs/dama/dama/depends.png index 4fb8e3fd71e93076cfc0327fb6c91e1b028251ef..8633225a3f139a5c5fd74ac44a60a8a985cafd2b 100644 GIT binary patch literal 34866 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 diff --git a/helm/software/matita/contribs/dama/dama/models/list_support.ma b/helm/software/matita/contribs/dama/dama/models/list_support.ma index 4a335e01e..ea701bb9d 100644 --- a/helm/software/matita/contribs/dama/dama/models/list_support.ma +++ b/helm/software/matita/contribs/dama/dama/models/list_support.ma @@ -171,7 +171,7 @@ intros 2; elim n; |1: rewrite < H2; rewrite > len_append; rewrite > plus_n_SO; reflexivity]]] qed. -include "cprop_connectives.ma". +include "logic/cprop_connectives.ma". definition eject_N ≝ λP.λp:∃x:nat.P x.match p with [ex_introT p _ ⇒ p]. diff --git a/helm/software/matita/contribs/dama/dama/models/nat_dedekind_sigma_complete.ma b/helm/software/matita/contribs/dama/dama/models/nat_dedekind_sigma_complete.ma index b5610cbe0..5cf875f80 100644 --- a/helm/software/matita/contribs/dama/dama/models/nat_dedekind_sigma_complete.ma +++ b/helm/software/matita/contribs/dama/dama/models/nat_dedekind_sigma_complete.ma @@ -22,10 +22,10 @@ alias symbol "leq" = "natural 'less or equal to'". lemma nat_dedekind_sigma_complete: ∀l,u:ℕ.∀a:sequence {[l,u]}.a is_increasing → ∀x.x is_supremum a → ∃i.∀j.i ≤ j → \fst x = \fst (a j). -intros 5; cases x (s Hs); clear x; letin X ≝ (〈s,Hs〉); +intros 5; cases x (s Hs); clear x; letin X ≝ ≪s,Hs≫; fold normalize X; intros; cases H1; alias symbol "plus" = "natural plus". -alias symbol "nat" = "Uniform space N". +alias symbol "N" = "Uniform space N". alias symbol "and" = "logical and". letin spec ≝ (λi,j:ℕ.(u≤i ∧ s = \fst (a j)) ∨ (i < u ∧ s+i ≤ u + \fst (a j))); (* s - aj <= max 0 (u - i) *) @@ -116,7 +116,7 @@ qed. alias symbol "pi1" = "exT \fst". alias symbol "leq" = "natural 'less or equal to'". -alias symbol "nat" = "ordered set N". +alias symbol "N" = "ordered set N". axiom nat_dedekind_sigma_complete_r: ∀l,u:ℕ.∀a:sequence {[l,u]}.a is_decreasing → ∀x.x is_infimum a → ∃i.∀j.i ≤ j → \fst x = \fst (a j). diff --git a/helm/software/matita/contribs/dama/dama/models/nat_ordered_uniform.ma b/helm/software/matita/contribs/dama/dama/models/nat_ordered_uniform.ma index 5291a23fd..17fef4165 100644 --- a/helm/software/matita/contribs/dama/dama/models/nat_ordered_uniform.ma +++ b/helm/software/matita/contribs/dama/dama/models/nat_ordered_uniform.ma @@ -25,4 +25,4 @@ lapply (H12 H1) as H13; apply (le_le_eq); |2: apply (le_transitive ????? H5); apply (Le≫ (\snd p) H13); assumption;] qed. -interpretation "Ordered uniform space N" 'nat = nat_ordered_uniform_space. +interpretation "Ordered uniform space N" 'N = nat_ordered_uniform_space. diff --git a/helm/software/matita/contribs/dama/dama/models/nat_uniform.ma b/helm/software/matita/contribs/dama/dama/models/nat_uniform.ma index cffccb59e..0b2d43563 100644 --- a/helm/software/matita/contribs/dama/dama/models/nat_uniform.ma +++ b/helm/software/matita/contribs/dama/dama/models/nat_uniform.ma @@ -19,4 +19,4 @@ definition nat_uniform_space: uniform_space. apply (discrete_uniform_space_of_bishop_set ℕ); qed. -interpretation "Uniform space N" 'nat = nat_uniform_space. \ No newline at end of file +interpretation "Uniform space N" 'N = nat_uniform_space. \ No newline at end of file diff --git a/helm/software/matita/contribs/dama/dama/models/q_bars.ma b/helm/software/matita/contribs/dama/dama/models/q_bars.ma index 7279fe8c0..de3958907 100644 --- a/helm/software/matita/contribs/dama/dama/models/q_bars.ma +++ b/helm/software/matita/contribs/dama/dama/models/q_bars.ma @@ -15,7 +15,7 @@ include "nat_ordered_set.ma". include "models/q_support.ma". include "models/list_support.ma". -include "cprop_connectives.ma". +include "logic/cprop_connectives.ma". definition bar ≝ ℚ × (ℚ × ℚ). diff --git a/helm/software/matita/contribs/dama/dama/models/q_support.ma b/helm/software/matita/contribs/dama/dama/models/q_support.ma index 6694a033f..70b3e6ade 100644 --- a/helm/software/matita/contribs/dama/dama/models/q_support.ma +++ b/helm/software/matita/contribs/dama/dama/models/q_support.ma @@ -14,10 +14,9 @@ include "Q/q/qtimes.ma". include "Q/q/qplus.ma". -include "cprop_connectives.ma". +include "logic/cprop_connectives.ma". -notation "\rationals" non associative with precedence 99 for @{'q}. -interpretation "Q" 'q = Q. +interpretation "Q" 'Q = Q. (* group over Q *) axiom qp : ℚ → ℚ → ℚ. diff --git a/helm/software/matita/contribs/dama/dama/nat_ordered_set.ma b/helm/software/matita/contribs/dama/dama/nat_ordered_set.ma index 23865418c..231cdf941 100644 --- a/helm/software/matita/contribs/dama/dama/nat_ordered_set.ma +++ b/helm/software/matita/contribs/dama/dama/nat_ordered_set.ma @@ -49,8 +49,7 @@ apply (mk_ordered_set ? nat_excess); |2: apply nat_excess_cotransitive] qed. -notation "\naturals" non associative with precedence 90 for @{'nat}. -interpretation "ordered set N" 'nat = nat_ordered_set. +interpretation "ordered set N" 'N = nat_ordered_set. alias id "le" = "cic:/matita/nat/orders/le.ind#xpointer(1/1)". lemma os_le_to_nat_le: diff --git a/helm/software/matita/contribs/dama/dama/ordered_set.ma b/helm/software/matita/contribs/dama/dama/ordered_set.ma index a227af3c1..45a8a1b37 100644 --- a/helm/software/matita/contribs/dama/dama/ordered_set.ma +++ b/helm/software/matita/contribs/dama/dama/ordered_set.ma @@ -12,7 +12,7 @@ (* *) (**************************************************************************) -include "cprop_connectives.ma". +include "logic/cprop_connectives.ma". (* Definition 2.1 *) record ordered_set: Type ≝ { @@ -70,7 +70,5 @@ interpretation "ordered set square" 'square_os s = (square_ordered_set s). definition os_subset ≝ λO:ordered_set.λP,Q:O→Prop.∀x:O.P x → Q x. -notation "a \subseteq u" left associative with precedence 70 - for @{ 'subset $a $u }. -interpretation "ordered set subset" 'subset a b = (os_subset _ a b). +interpretation "ordered set subset" 'subseteq a b = (os_subset _ a b). diff --git a/helm/software/matita/contribs/dama/dama/ordered_uniform.ma b/helm/software/matita/contribs/dama/dama/ordered_uniform.ma index 66bcf6f0b..51ecff3f3 100644 --- a/helm/software/matita/contribs/dama/dama/ordered_uniform.ma +++ b/helm/software/matita/contribs/dama/dama/ordered_uniform.ma @@ -85,7 +85,7 @@ lemma invert_restriction_agreement: ∀O:ordered_uniform_space.∀l,r:O. ∀U:{[l,r]} square → Prop.∀u:O square → Prop. restriction_agreement ? l r U u → - restriction_agreement ? l r (inv U) (inv u). + restriction_agreement ? l r (\inv U) (\inv u). intros 9; split; intro; [1: apply (unrestrict ????? (segment_square_of_ordered_set_square ??? 〈\snd b,\fst b〉 H2 H1) H H3); |2: apply (restrict ????? (segment_square_of_ordered_set_square ??? 〈\snd b,\fst b〉 H2 H1) H H3);] @@ -96,8 +96,10 @@ lemma bs_of_ss: ∀O:ordered_set.∀u,v:O.{[u,v]} square → (bishop_set_of_ordered_set O) square ≝ λO:ordered_set.λu,v:O.λb:{[u,v]} square.〈\fst(\fst b),\fst(\snd b)〉. +(* notation < "x \sub \neq" with precedence 91 for @{'bsss $x}. interpretation "bs_of_ss" 'bsss x = (bs_of_ss _ _ _ x). +*) lemma ss_of_bs: ∀O:ordered_set.∀u,v:O. @@ -105,8 +107,10 @@ lemma ss_of_bs: λO:ordered_set.λu,v:O. λb:(O:bishop_set) square.λH1,H2.〈≪\fst b,H1≫,≪\snd b,H2≫〉. +(* notation < "x \sub \nleq" with precedence 91 for @{'ssbs $x}. interpretation "ss_of_bs" 'ssbs x = (ss_of_bs _ _ _ x _ _). +*) lemma segment_ordered_uniform_space: ∀O:ordered_uniform_space.∀u,v:O.ordered_uniform_space. diff --git a/helm/software/matita/contribs/dama/dama/russell_support.ma b/helm/software/matita/contribs/dama/dama/russell_support.ma index bcaabd677..deb5fc950 100644 --- a/helm/software/matita/contribs/dama/dama/russell_support.ma +++ b/helm/software/matita/contribs/dama/dama/russell_support.ma @@ -13,7 +13,7 @@ (**************************************************************************) include "nat/nat.ma". -include "cprop_connectives.ma". +include "logic/cprop_connectives.ma". definition hide ≝ λT:Type.λx:T.x. diff --git a/helm/software/matita/contribs/dama/dama/supremum.ma b/helm/software/matita/contribs/dama/dama/supremum.ma index f0260471f..6fa8e35ad 100644 --- a/helm/software/matita/contribs/dama/dama/supremum.ma +++ b/helm/software/matita/contribs/dama/dama/supremum.ma @@ -93,15 +93,15 @@ definition strictly_increasing ≝ 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 +notation < "s \nbsp 'is_strictly_increasing'" non associative with precedence 45 for @{'strictly_increasing $s}. -notation > "s 'is_strictly_increasing'" non associative with precedence 50 +notation > "s 'is_strictly_increasing'" non associative with precedence 45 for @{'strictly_increasing $s}. interpretation "Ordered set strict increasing" 'strictly_increasing s = (strictly_increasing _ s). -notation < "s \nbsp 'is_strictly_decreasing'" non associative with precedence 50 +notation < "s \nbsp 'is_strictly_decreasing'" non associative with precedence 45 for @{'strictly_decreasing $s}. -notation > "s 'is_strictly_decreasing'" non associative with precedence 50 +notation > "s 'is_strictly_decreasing'" non associative with precedence 45 for @{'strictly_decreasing $s}. interpretation "Ordered set strict decreasing" 'strictly_decreasing s = (strictly_decreasing _ s). @@ -229,10 +229,10 @@ interpretation "Order convergence" 'order_converge s u = (order_converge _ s u). (* Definition 2.8 *) definition segment ≝ λO:ordered_set.λa,b:O.λx:O.(x ≤ b) ∧ (a ≤ x). -notation "[a,b]" left associative with precedence 70 for @{'segment $a $b}. +notation "[term 19 a,term 19 b]" non associative with precedence 90 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 45 +notation "hvbox(x \in break [term 19 a, term 19 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). diff --git a/helm/software/matita/contribs/dama/dama/uniform.ma b/helm/software/matita/contribs/dama/dama/uniform.ma index 82278eb08..a89a42ba8 100644 --- a/helm/software/matita/contribs/dama/dama/uniform.ma +++ b/helm/software/matita/contribs/dama/dama/uniform.ma @@ -14,7 +14,6 @@ include "supremum.ma". - (* Definition 2.13 *) alias symbol "square" = "bishop set square". alias symbol "pair" = "Pair construction". @@ -34,11 +33,8 @@ interpretation "ordered set relations composition" 'compose a b = (compose_os_re definition invert_bs_relation ≝ λC:bishop_set.λU:C square → Prop. λx:C square. U 〈\snd x,\fst x〉. - -notation < "s \sup (-1)" with precedence 70 for @{ 'invert $s }. -notation < "s \sup (-1) x" with precedence 70 - for @{ 'invert_appl $s $x}. -notation > "'inv'" with precedence 70 for @{ 'invert_symbol }. + +notation > "\inv" with precedence 60 for @{ 'invert_symbol }. interpretation "relation invertion" 'invert a = (invert_bs_relation _ a). interpretation "relation invertion" 'invert_symbol = (invert_bs_relation _). interpretation "relation invertion" 'invert_appl a x = (invert_bs_relation _ a x). @@ -57,7 +53,7 @@ record uniform_space : Type ≝ { ∃W:us_carr square → Prop.us_unifbase W ∧ (W ⊆ (λx.U x ∧ V x)); us_phi3: ∀U:us_carr square → Prop. us_unifbase U → ∃W:us_carr square → Prop.us_unifbase W ∧ (W ∘ W) ⊆ U; - us_phi4: ∀U:us_carr square → Prop. us_unifbase U → ∀x.(U x → (inv U) x) ∧ ((inv U) x → U x) + us_phi4: ∀U:us_carr square → Prop. us_unifbase U → ∀x.(U x → (\inv U) x) ∧ ((\inv U) x → U x) }. (* Definition 2.14 *) @@ -66,9 +62,9 @@ definition cauchy ≝ λC:uniform_space.λa:sequence C.∀U.us_unifbase C U → ∃n. ∀i,j. n ≤ i → n ≤ j → U 〈a i,a j〉. -notation < "a \nbsp 'is_cauchy'" non associative with precedence 50 +notation < "a \nbsp 'is_cauchy'" non associative with precedence 45 for @{'cauchy $a}. -notation > "a 'is_cauchy'" non associative with precedence 50 +notation > "a 'is_cauchy'" non associative with precedence 45 for @{'cauchy $a}. interpretation "Cauchy sequence" 'cauchy s = (cauchy _ s). @@ -77,9 +73,9 @@ definition uniform_converge ≝ λC:uniform_space.λa:sequence C.λu:C. ∀U.us_unifbase C U → ∃n. ∀i. n ≤ i → U 〈u,a i〉. -notation < "a \nbsp (\u \atop (\horbar\triangleright)) \nbsp x" non associative with precedence 50 +notation < "a \nbsp (\u \atop (\horbar\triangleright)) \nbsp x" non associative with precedence 45 for @{'uniform_converge $a $x}. -notation > "a 'uniform_converges' x" non associative with precedence 50 +notation > "a 'uniform_converges' x" non associative with precedence 45 for @{'uniform_converge $a $x}. interpretation "Uniform convergence" 'uniform_converge s u = (uniform_converge _ s u). diff --git a/helm/software/matita/core_notation.moo b/helm/software/matita/core_notation.moo index ed0c7007b..b201a0555 100644 --- a/helm/software/matita/core_notation.moo +++ b/helm/software/matita/core_notation.moo @@ -94,6 +94,10 @@ notation "hvbox(a break * b)" left associative with precedence 55 for @{ 'times $a $b }. +notation "hvbox(a break \middot b)" + left associative with precedence 55 + for @{ 'middot $a $b }. + notation "hvbox(a break \mod b)" left associative with precedence 55 for @{ 'module $a $b }. @@ -117,10 +121,6 @@ notation "a !" non associative with precedence 80 for @{ 'fact $a }. -notation "(a \sup b)" - right associative with precedence 65 -for @{ 'exp $a $b}. - notation "\sqrt a" non associative with precedence 60 for @{ 'sqrt $a }. @@ -136,3 +136,52 @@ for @{ 'and $a $b }. notation "hvbox(\lnot a)" non associative with precedence 40 for @{ 'not $a }. + +notation "hvbox(\Omega \sup term 90 A)" non associative with precedence 70 +for @{ 'powerset $A }. + +notation < "hvbox({ ident i | term 19 p })" with precedence 90 +for @{ 'subset (\lambda ${ident i} : $nonexistent . $p)}. + +notation > "hvbox({ ident i | term 19 p })" with precedence 90 +for @{ 'subset (\lambda ${ident i}. $p)}. + +notation "hvbox(a break ∈ b)" non associative with precedence 45 +for @{ 'mem $a $b }. + +notation "hvbox(a break ≬ b)" non associative with precedence 45 +for @{ 'overlaps $a $b }. (* \between *) + +notation "hvbox(a break ⊆ b)" non associative with precedence 45 +for @{ 'subseteq $a $b }. (* \subseteq *) + +notation "hvbox(a break ∩ b)" non associative with precedence 55 +for @{ 'intersects $a $b }. (* \cap *) + +notation "hvbox(a break ∪ b)" non associative with precedence 50 +for @{ 'union $a $b }. (* \cup *) + +notation "hvbox({ term 19 a })" with precedence 90 for @{ 'singl $a}. + +notation "hvbox(a break \approx b)" non associative with precedence 45 + for @{ 'napart $a $b}. + +notation "hvbox(a break # b)" non associative with precedence 45 + for @{ 'apart $a $b}. + +notation "hvbox(a break \circ b)" + left associative with precedence 55 +for @{ 'compose $a $b }. + +notation "(a \sup b)" left associative with precedence 60 for @{ 'exp $a $b}. +notation "s \sup (-1)" with precedence 60 for @{ 'invert $s }. +notation < "s \sup (-1) x" with precedence 60 for @{ 'invert_appl $s $x}. + + +notation "\naturals" non associative with precedence 90 for @{'N}. +notation "\rationals" non associative with precedence 90 for @{'Q}. +notation "\reals" non associative with precedence 90 for @{'R}. +notation "\integers" non associative with precedence 90 for @{'Z}. +notation "\complexes" non associative with precedence 90 for @{'C}. + +notation "\ee" with precedence 90 for @{ 'neutral }. (* ⅇ *) diff --git a/helm/software/matita/library/algebra/groups.ma b/helm/software/matita/library/algebra/groups.ma index aeb0d779a..29324c4aa 100644 --- a/helm/software/matita/library/algebra/groups.ma +++ b/helm/software/matita/library/algebra/groups.ma @@ -33,11 +33,7 @@ record Group : Type ≝ group_properties:> isGroup pregroup }. -notation "hvbox(x \sup (-1))" with precedence 89 -for @{ 'ginv $x }. - -interpretation "Group inverse" 'ginv x = - (cic:/matita/algebra/groups/inv.con _ x). +interpretation "Group inverse" 'invert x = (inv _ x). definition left_cancellable ≝ λT:Type. λop: T -> T -> T. @@ -88,7 +84,7 @@ reflexivity. qed. theorem eq_opxy_e_to_eq_x_invy: - ∀G:Group. ∀x,y:G. x·y=1 → x=y \sup -1. + ∀G:Group. ∀x,y:G. x·y=ⅇ → x=y \sup -1. intros; apply (eq_op_x_y_op_z_y_to_eq ? y); rewrite > (inv_is_left_inverse ? G); @@ -96,7 +92,7 @@ assumption. qed. theorem eq_opxy_e_to_eq_invx_y: - ∀G:Group. ∀x,y:G. x·y=1 → x \sup -1=y. + ∀G:Group. ∀x,y:G. x·y=ⅇ → x \sup -1=y. intros; apply (eq_op_x_y_op_x_z_to_eq ? x); rewrite > (inv_is_right_inverse ? G); @@ -140,20 +136,14 @@ qed. (* Morphisms *) record morphism (G,G':Group) : Type ≝ - { image: G → G'; + { image:1> G → G'; f_morph: ∀x,y:G.image(x·y) = image x · image y }. -notation "hvbox(f\tilde x)" with precedence 79 -for @{ 'morimage $f $x }. - -interpretation "Morphism image" 'morimage f x = - (cic:/matita/algebra/groups/image.con _ _ f x). - theorem morphism_to_eq_f_1_1: - ∀G,G'.∀f:morphism G G'.f˜1 = 1. + ∀G,G'.∀f:morphism G G'.f ⅇ = ⅇ. intros; -apply (eq_op_x_y_op_z_y_to_eq ? (f˜1)); +apply (eq_op_x_y_op_z_y_to_eq ? (f ⅇ)); rewrite > (e_is_left_unit ? G'); rewrite < f_morph; rewrite > (e_is_left_unit ? G); @@ -162,9 +152,9 @@ qed. theorem eq_image_inv_inv_image: ∀G,G'.∀f:morphism G G'. - ∀x.f˜(x \sup -1) = (f˜x) \sup -1. + ∀x.f (x \sup -1) = (f x) \sup -1. intros; -apply (eq_op_x_y_op_z_y_to_eq ? (f˜x)); +apply (eq_op_x_y_op_z_y_to_eq ? (f x)); rewrite > (inv_is_left_inverse ? G'); rewrite < f_morph; rewrite > (inv_is_left_inverse ? G); diff --git a/helm/software/matita/library/algebra/monoids.ma b/helm/software/matita/library/algebra/monoids.ma index 556faf6ca..fe35eeb67 100644 --- a/helm/software/matita/library/algebra/monoids.ma +++ b/helm/software/matita/library/algebra/monoids.ma @@ -32,21 +32,17 @@ record Monoid : Type ≝ monoid_properties:> isMonoid premonoid }. -notation "1" with precedence 89 -for @{ 'munit }. - -interpretation "Monoid unit" 'munit = - (cic:/matita/algebra/monoids/e.con _). +interpretation "Monoid unit" 'neutral = (e _). definition is_left_inverse ≝ λM:Monoid. λopp: M → M. - ∀x:M. (opp x)·x = 1. + ∀x:M. (opp x)·x = ⅇ. definition is_right_inverse ≝ λM:Monoid. λopp: M → M. - ∀x:M. x·(opp x) = 1. + ∀x:M. x·(opp x) = ⅇ. theorem is_left_inverse_to_is_right_inverse_to_eq: ∀M:Monoid. ∀l,r. diff --git a/helm/software/matita/library/algebra/semigroups.ma b/helm/software/matita/library/algebra/semigroups.ma index 5a739ae12..af5e01e06 100644 --- a/helm/software/matita/library/algebra/semigroups.ma +++ b/helm/software/matita/library/algebra/semigroups.ma @@ -21,12 +21,7 @@ record Magma : Type≝ op: carrier → carrier → carrier }. -notation "hvbox(a break \middot b)" - left associative with precedence 55 -for @{ 'magma_op $a $b }. - -interpretation "magma operation" 'magma_op a b = - (cic:/matita/algebra/semigroups/op.con _ a b). +interpretation "magma operation" 'middot a b = (op _ a b). (* Semigroups *) diff --git a/helm/software/matita/library/datatypes/subsets.ma b/helm/software/matita/library/datatypes/subsets.ma new file mode 100644 index 000000000..f9fae64a0 --- /dev/null +++ b/helm/software/matita/library/datatypes/subsets.ma @@ -0,0 +1,47 @@ +(**************************************************************************) +(* ___ *) +(* ||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 "logic/cprop_connectives.ma". + +record powerset (A: Type) : Type ≝ { char: A → CProp }. + +interpretation "powerset" 'powerset A = (powerset A). + +interpretation "subset construction" 'subset \eta.x = (mk_powerset _ x). + +definition mem ≝ λA.λS:Ω \sup A.λx:A. match S with [mk_powerset c ⇒ c x]. + +interpretation "mem" 'mem a S = (mem _ S a). + +definition overlaps ≝ λA:Type.λU,V:Ω \sup A.exT2 ? (λa:A. a ∈ U) (λa.a ∈ V). + +interpretation "overlaps" 'overlaps U V = (overlaps _ U V). + +definition subseteq ≝ λA:Type.λU,V:Ω \sup A.∀a:A. a ∈ U → a ∈ V. + +interpretation "subseteq" 'subseteq U V = (subseteq _ U V). + +definition intersects ≝ λA:Type.λU,V:Ω \sup A.{a | a ∈ U ∧ a ∈ V}. + +interpretation "intersects" 'intersects U V = (intersects _ U V). + +definition union ≝ λA:Type.λU,V:Ω \sup A.{a | a ∈ U ∨ a ∈ V}. + +interpretation "union" 'union U V = (union _ U V). + +include "logic/equality.ma". + +definition singleton ≝ λA:Type.λa:A.{b | a=b}. + +interpretation "singleton" 'singl a = (singleton _ a). diff --git a/helm/software/matita/library/demo/formal_topology.ma b/helm/software/matita/library/demo/formal_topology.ma index a68378408..3814ac3f1 100644 --- a/helm/software/matita/library/demo/formal_topology.ma +++ b/helm/software/matita/library/demo/formal_topology.ma @@ -12,82 +12,18 @@ (* *) (**************************************************************************) -include "logic/equality.ma". - -inductive And (A,B:CProp) : CProp ≝ - conj: A → B → And A B. - -interpretation "constructive and" 'and x y = (And x y). - -inductive Or (A,B:CProp) : CProp ≝ - | or_intro_l: A → Or A B - | or_intro_r: B → Or A B. - -interpretation "constructive or" 'or x y = (Or x y). - -inductive exT2 (A:Type) (P,Q:A→CProp) : CProp ≝ - ex_introT2: ∀w:A. P w → Q w → exT2 A P Q. - -record powerset (A: Type) : Type ≝ { char: A → CProp }. - -notation "hvbox(2 \sup A)" non associative with precedence 45 -for @{ 'powerset $A }. - -interpretation "powerset" 'powerset A = (powerset A). - -notation < "hvbox({ ident i | term 19 p })" with precedence 90 -for @{ 'subset (\lambda ${ident i} : $nonexistent . $p)}. - -notation > "hvbox({ ident i | term 19 p })" with precedence 90 -for @{ 'subset (\lambda ${ident i}. $p)}. - -interpretation "subset construction" 'subset \eta.x = (mk_powerset _ x). - -definition mem ≝ λA.λS:2 \sup A.λx:A. match S with [mk_powerset c ⇒ c x]. - -notation "hvbox(a break ∈ b)" non associative with precedence 45 -for @{ 'mem $a $b }. - -interpretation "mem" 'mem a S = (mem _ S a). - -definition overlaps ≝ λA:Type.λU,V:2 \sup A.exT2 ? (λa:A. a ∈ U) (λa.a ∈ V). - -notation "hvbox(a break ≬ b)" non associative with precedence 45 -for @{ 'overlaps $a $b }. (* \between *) - -interpretation "overlaps" 'overlaps U V = (overlaps _ U V). - -definition subseteq ≝ λA:Type.λU,V:2 \sup A.∀a:A. a ∈ U → a ∈ V. - -notation "hvbox(a break ⊆ b)" non associative with precedence 45 -for @{ 'subseteq $a $b }. (* \subseteq *) - -interpretation "subseteq" 'subseteq U V = (subseteq _ U V). - -definition intersects ≝ λA:Type.λU,V:2 \sup A.{a | a ∈ U ∧ a ∈ V}. - -notation "hvbox(a break ∩ b)" non associative with precedence 55 -for @{ 'intersects $a $b }. (* \cap *) - -interpretation "intersects" 'intersects U V = (intersects _ U V). - -definition union ≝ λA:Type.λU,V:2 \sup A.{a | a ∈ U ∨ a ∈ V}. - -notation "hvbox(a break ∪ b)" non associative with precedence 55 -for @{ 'union $a $b }. (* \cup *) - -interpretation "union" 'union U V = (union _ U V). +include "datatypes/subsets.ma". record axiom_set : Type ≝ { A:> Type; i: A → Type; - C: ∀a:A. i a → 2 \sup A + C: ∀a:A. i a → Ω \sup A }. -inductive for_all (A: axiom_set) (U,V: 2 \sup A) (covers: A → CProp) : CProp ≝ +inductive for_all (A: axiom_set) (U,V: Ω \sup A) (covers: A → CProp) : CProp ≝ iter: (∀a:A.a ∈ V → covers a) → for_all A U V covers. -inductive covers (A: axiom_set) (U: 2 \sup A) : A → CProp ≝ +inductive covers (A: axiom_set) (U: \Omega \sup A) : A → CProp ≝ refl: ∀a:A. a ∈ U → covers A U a | infinity: ∀a:A. ∀j: i ? a. for_all A U (C ? a j) (covers A U) → covers A U a. @@ -98,8 +34,8 @@ interpretation "coversl" 'covers A U = (for_all _ U A (covers _ U)). interpretation "covers" 'covers a U = (covers _ U a). definition covers_elim ≝ - λA:axiom_set.λU: 2 \sup A.λP:2 \sup A. - λH1:∀a:A. a ∈ U → a ∈ P. + λA:axiom_set.λU: \Omega \sup A.λP:\Omega \sup A. + λH1: U ⊆ P. λH2:∀a:A.∀j:i ? a. C ? a j ◃ U → C ? a j ⊆ P → a ∈ P. let rec aux (a:A) (p:a ◃ U) on p : a ∈ P ≝ match p return λaa.λ_:aa ◃ U.aa ∈ P with @@ -111,10 +47,10 @@ definition covers_elim ≝ in aux. -inductive ex_such (A : axiom_set) (U,V : 2 \sup A) (fish: A → CProp) : CProp ≝ +inductive ex_such (A : axiom_set) (U,V : \Omega \sup A) (fish: A → CProp) : CProp ≝ found : ∀a. a ∈ V → fish a → ex_such A U V fish. -coinductive fish (A:axiom_set) (U: 2 \sup A) : A → CProp ≝ +coinductive fish (A:axiom_set) (U: \Omega \sup A) : A → CProp ≝ mk_fish: ∀a:A. a ∈ U → (∀j: i ? a. ex_such A U (C ? a j) (fish A U)) → fish A U a. notation "hvbox(a break ⋉ b)" non associative with precedence 45 @@ -123,8 +59,8 @@ for @{ 'fish $a $b }. (* a \ltimes b *) interpretation "fishl" 'fish A U = (ex_such _ U A (fish _ U)). interpretation "fish" 'fish a U = (fish _ U a). -let corec fish_rec (A:axiom_set) (U: 2 \sup A) - (P: 2 \sup A) (H1: ∀a:A. a ∈ P → a ∈ U) +let corec fish_rec (A:axiom_set) (U: \Omega \sup A) + (P: Ω \sup A) (H1: P ⊆ U) (H2: ∀a:A. a ∈ P → ∀j: i ? a. C ? a j ≬ P): ∀a:A. ∀p: a ∈ P. a ⋉ U ≝ λa,p. @@ -177,12 +113,6 @@ theorem compatibility: ∀A:axiom_set.∀a:A.∀U,V. a ⋉ V → a ◃ U → U cases (H1 i); clear H1; apply (H3 a1); assumption] qed. -definition singleton ≝ λA:axiom_set.λa:A.{b | a=b}. - -notation "hvbox({ term 19 a })" with precedence 90 for @{ 'singl $a}. - -interpretation "singleton" 'singl a = (singleton _ a). - definition leq ≝ λA:axiom_set.λa,b:A. a ◃ {b}. interpretation "covered by one" 'leq a b = (leq _ a b). @@ -211,13 +141,13 @@ notation "↑a" with precedence 80 for @{ 'uparrow $a }. interpretation "uparrow" 'uparrow a = (uparrow _ a). -definition downarrow ≝ λA:axiom_set.λU:2 \sup A.mk_powerset ? (λa:A. ↑a ≬ U). +definition downarrow ≝ λA:axiom_set.λU:Ω \sup A.mk_powerset ? (λa:A. ↑a ≬ U). notation "↓a" with precedence 80 for @{ 'downarrow $a }. interpretation "downarrow" 'downarrow a = (downarrow _ a). -definition fintersects ≝ λA:axiom_set.λU,V:2 \sup A.↓U ∩ ↓V. +definition fintersects ≝ λA:axiom_set.λU,V:Ω \sup A.↓U ∩ ↓V. notation "hvbox(U break ↓ V)" non associative with precedence 80 for @{ 'fintersects $U $V }. @@ -225,6 +155,6 @@ interpretation "fintersects" 'fintersects U V = (fintersects _ U V). record convergent_generated_topology : Type ≝ { AA:> axiom_set; - convergence: ∀a:AA.∀U,V:2 \sup AA. a ◃ U → a ◃ V → a ◃ U ↓ V + convergence: ∀a:AA.∀U,V:Ω \sup AA. a ◃ U → a ◃ V → a ◃ U ↓ V }. diff --git a/helm/software/matita/library/depends b/helm/software/matita/library/depends index bd27126af..2be7477f3 100644 --- a/helm/software/matita/library/depends +++ b/helm/software/matita/library/depends @@ -10,6 +10,7 @@ Z/z.ma datatypes/bool.ma nat/nat.ma datatypes/constructors.ma logic/equality.ma datatypes/compare.ma datatypes/bool.ma higher_order_defs/functions.ma logic/equality.ma +datatypes/subsets.ma logic/cprop_connectives.ma logic/equality.ma algebra/groups.ma algebra/monoids.ma datatypes/bool.ma logic/connectives.ma nat/compare.ma nat/le_arith.ma algebra/finite_groups.ma algebra/groups.ma nat/relevant_equations.ma algebra/semigroups.ma higher_order_defs/functions.ma @@ -17,7 +18,8 @@ algebra/monoids.ma algebra/semigroups.ma demo/power_derivative.ma nat/compare.ma nat/nat.ma nat/orders.ma nat/plus.ma demo/propositional_sequent_calculus.ma datatypes/constructors.ma list/sort.ma nat/compare.ma nat/plus.ma demo/realisability.ma datatypes/constructors.ma logic/connectives.ma -demo/formal_topology.ma logic/equality.ma +demo/formal_topology.ma datatypes/subsets.ma +demo/natural_deduction.ma list/sort.ma datatypes/bool.ma datatypes/constructors.ma list/in.ma list/list.ma datatypes/bool.ma higher_order_defs/functions.ma logic/equality.ma nat/nat.ma nat/orders.ma nat/plus.ma list/in.ma datatypes/bool.ma datatypes/constructors.ma list/list.ma @@ -25,6 +27,7 @@ logic/equality.ma higher_order_defs/relations.ma logic/connectives.ma logic/connectives.ma logic/coimplication.ma logic/connectives.ma logic/connectives2.ma higher_order_defs/relations.ma +logic/cprop_connectives.ma datatypes/constructors.ma logic/equality.ma nat/div_and_mod.ma datatypes/constructors.ma nat/minus.ma nat/count.ma nat/permutation.ma nat/relevant_equations.ma nat/sigma_and_pi.ma nat/totient1.ma nat/compare.ma nat/gcd_properties1.ma nat/iteration2.ma nat/totient.ma diff --git a/helm/software/matita/library/higher_order_defs/functions.ma b/helm/software/matita/library/higher_order_defs/functions.ma index a6174f48f..195cbfc17 100644 --- a/helm/software/matita/library/higher_order_defs/functions.ma +++ b/helm/software/matita/library/higher_order_defs/functions.ma @@ -18,10 +18,6 @@ definition compose \def \lambda A,B,C:Type.\lambda f:(B\to C).\lambda g:(A\to B).\lambda x:A. f (g x). -notation "hvbox(a break \circ b)" - left associative with precedence 70 -for @{ 'compose $a $b }. - interpretation "function composition" 'compose f g = (cic:/matita/higher_order_defs/functions/compose.con _ _ _ f g). diff --git a/helm/software/matita/contribs/dama/dama/cprop_connectives.ma b/helm/software/matita/library/logic/cprop_connectives.ma similarity index 97% rename from helm/software/matita/contribs/dama/dama/cprop_connectives.ma rename to helm/software/matita/library/logic/cprop_connectives.ma index 93fbac9b2..b4c556d83 100644 --- a/helm/software/matita/contribs/dama/dama/cprop_connectives.ma +++ b/helm/software/matita/library/logic/cprop_connectives.ma @@ -101,6 +101,9 @@ interpretation "exT2 \snd" 'pi2a x = (pi2exT23 _ _ _ _ x). interpretation "exT2 \fst" 'pi1b x y = (pi1exT23 _ _ _ _ x y). interpretation "exT2 \snd" 'pi2b x y = (pi2exT23 _ _ _ _ x y). +inductive exT2 (A:Type) (P,Q:A→CProp) : CProp ≝ + ex_introT2: ∀w:A. P w → Q w → exT2 A P Q. + definition Not : CProp → Prop ≝ λx:CProp.x → False. interpretation "constructive not" 'not x = (Not x). -- 2.39.2