]> matita.cs.unibo.it Git - helm.git/blob - helm/software/matita/nlibrary/topology/igft.ma
a nice bug in meta handling is not visible... brr...
[helm.git] / helm / software / matita / nlibrary / topology / igft.ma
1 include "sets/sets.ma".
2
3 nrecord axiom_set : Type[1] ≝ { 
4   S:> Type[0];
5   I: S → Type[0];
6   C: ∀a:S. I a → Ω ^ S
7 }.
8
9 notation "𝐈 term 90 a" non associative with precedence 70 for @{ 'I $a }.
10 notation "𝐂 term 90 a term 90 i" non associative with precedence 70 for @{ 'C $a $i }.
11
12 interpretation "I" 'I a = (I ? a).
13 interpretation "C" 'C a i = (C ? a i).
14
15 ndefinition cover_set ≝ λc:∀A:axiom_set.Ω^A → A → CProp[0].λA,C,U.
16   ∀y.y ∈ C → c A U y.
17
18 (* a \ltri b *)
19 notation "hvbox(a break ◃ b)" non associative with precedence 45
20 for @{ 'covers $a $b }.
21
22 interpretation "covers set temp" 'covers C U = (cover_set ?? C U).
23
24 ninductive cover (A : axiom_set) (U : Ω^A) : A → CProp[0] ≝ 
25 | creflexivity : ∀a:A. a ∈ U → cover ? U a
26 | cinfinity    : ∀a:A. ∀i:?. ((C ? a i) ◃ U) → cover ? U a.
27 napply cover;
28 nqed.
29
30 interpretation "covers" 'covers a U = (cover ? U a).
31 interpretation "covers set" 'covers a U = (cover_set cover ? a U).
32
33 ndefinition fish_set ≝ λf:∀A:axiom_set.Ω^A → A → CProp[0].
34  λA,U,V.
35   ∃a.a ∈ V ∧ f A U a.
36
37 (* a \ltimes b *)
38 notation "hvbox(a break ⋉ b)" non associative with precedence 45
39 for @{ 'fish $a $b }. 
40
41 interpretation "fish set temp" 'fish A U = (fish_set ?? U A).
42
43 ncoinductive fish (A : axiom_set) (F : Ω^A) : A → CProp[0] ≝ 
44 | cfish : ∀a. a ∈ F → (∀i:𝐈 a.C A a i ⋉ F) → fish A F a.
45 napply fish;
46 nqed.
47
48 interpretation "fish set" 'fish A U = (fish_set fish ? U A).
49 interpretation "fish" 'fish a U = (fish ? U a).
50
51 nlet corec fish_rec (A:axiom_set) (U: Ω^A)
52  (P: Ω^A) (H1: P ⊆ U)
53   (H2: ∀a:A. a ∈ P → ∀j: 𝐈 a. C ? a j ≬ P):
54    ∀a:A. ∀p: a ∈ P. a ⋉ U ≝ ?.
55 #a; #p; napply cfish;
56 ##[ napply H1; napply p;
57 ##| #i; ncases (H2 a p i); #x; *; #xC; #xP; @; ##[napply x]
58     @; ##[ napply xC ] napply (fish_rec ? U P); nassumption;
59 ##]
60 nqed.
61
62 notation "◃U" non associative with precedence 55
63 for @{ 'coverage $U }.
64
65 ndefinition coverage : ∀A:axiom_set.∀U:Ω^A.Ω^A ≝ λA,U.{ a | a ◃ U }.
66
67 interpretation "coverage cover" 'coverage U = (coverage ? U).
68
69 ndefinition cover_equation : ∀A:axiom_set.∀U,X:Ω^A.CProp[0] ≝  λA,U,X. 
70   ∀a.a ∈ X ↔ (a ∈ U ∨ ∃i:𝐈 a.∀y.y ∈ 𝐂 a i → y ∈ X).  
71
72 ntheorem coverage_cover_equation : ∀A,U. cover_equation A U (◃U).
73 #A; #U; #a; @; #H;
74 ##[ nelim H; #b; (* manca clear *)
75     ##[ #bU; @1; nassumption;
76     ##| #i; #CaiU; #IH; @2; @ i; #c; #cCbi; ncases (IH ? cCbi);
77         ##[ #E; @; napply E;
78         ##| #_; napply CaiU; nassumption; ##] ##]
79 ##| ncases H; ##[ #E; @; nassumption]
80     *; #j; #Hj; @2 j; #w; #wC; napply Hj; nassumption;
81 ##]
82 nqed. 
83
84 ntheorem coverage_min_cover_equation : ∀A,U,W. cover_equation A U W → ◃U ⊆ W.
85 #A; #U; #W; #H; #a; #aU; nelim aU; #b;
86 ##[ #bU; ncases (H b); #_; #H1; napply H1; @1; nassumption;
87 ##| #i; #CbiU; #IH; ncases (H b); #_; #H1; napply H1; @2; @i; napply IH;
88 ##]
89 nqed.
90
91 notation "⋉F" non associative with precedence 55
92 for @{ 'fished $F }.
93
94 ndefinition fished : ∀A:axiom_set.∀F:Ω^A.Ω^A ≝ λA,F.{ a | a ⋉ F }.
95
96 interpretation "fished fish" 'fished F = (fished ? F).
97
98 ndefinition fish_equation : ∀A:axiom_set.∀F,X:Ω^A.CProp[0] ≝ λA,F,X.
99   ∀a. a ∈ X ↔ a ∈ F ∧ ∀i:𝐈 a.∃y.y ∈ 𝐂 a i ∧ y ∈ X. 
100   
101 ntheorem fised_fish_equation : ∀A,F. fish_equation A F (⋉F).
102 #A; #F; #a; @; (* bug, fare case sotto diverso da farlo sopra *) #H; ncases H;
103 ##[ #b; #bF; #H2; @ bF; #i; ncases (H2 i); #c; *; #cC; #cF; @c; @ cC;
104     napply cF;  
105 ##| #aF; #H1; @ aF; napply H1;
106 ##]
107 nqed.
108
109 ntheorem fised_max_fish_equation : ∀A,F,G. fish_equation A F G → G ⊆ ⋉F.
110 #A; #F; #G; #H; #a; #aG; napply (fish_rec … aG);
111 #b; ncases (H b); #H1; #_; #bG; ncases (H1 bG); #E1; #E2; nassumption; 
112 nqed. 
113