1 (**************************************************************************)
4 (* ||A|| A project by Andrea Asperti *)
6 (* ||I|| Developers: *)
7 (* ||T|| The HELM team. *)
8 (* ||A|| http://helm.cs.unibo.it *)
10 (* \ / This file is distributed under the terms of the *)
11 (* v GNU General Public License Version 2 *)
13 (**************************************************************************)
15 include "topology/igft.ma".
17 ntheorem axiom_cond: ∀A:Ax.∀a:A.∀i:𝐈 a.a ◃ 𝐂 a i.
18 #A; #a; #i; @2 i; #x; #H; @; napply H;
21 nlemma hint_auto1 : ∀A,U,V. (∀x.x ∈ U → x ◃ V) → cover_set cover A U V.
25 alias symbol "covers" (instance 1) = "covers".
26 alias symbol "covers" (instance 2) = "covers set".
27 alias symbol "covers" (instance 3) = "covers".
28 ntheorem transitivity: ∀A:Ax.∀a:A.∀U,V. a ◃ U → U ◃ V → a ◃ V.
29 #A; #a; #U; #V; #aU; #UV; nelim aU; /3/;
32 ndefinition emptyset: ∀A.Ω^A ≝ λA.{x | False}.
34 notation "∅" non associative with precedence 90 for @{ 'empty }.
35 interpretation "empty" 'empty = (emptyset ?).
37 naxiom EM : ∀A:Ax.∀a:A.∀i_star.(a ∈ 𝐂 a i_star) ∨ ¬( a ∈ 𝐂 a i_star).
39 alias symbol "covers" = "covers".
41 ∀A:Ax.∀a:A. a ◃ ∅ → ∃i. ¬ a ∈ 𝐂 a i.
44 ##| #b; #i_star; #IH1; #IH2; ncases (EM … b i_star); /3/;
48 ninductive eq1 (A : Type[0]) : Type[0] → CProp[0] ≝
51 notation "hvbox( a break ∼ b)" non associative with precedence 40
54 interpretation "eq between types" 'eqT a b = (eq1 a b).
56 ninductive unit : Type[0] ≝ one : unit.
58 nrecord uAx : Type[1] ≝ {
60 with_ : ∀a:uax_.𝐈 a ∼ unit
63 ndefinition uax : uAx → Ax.
64 #A; @ (uax_ A) (λx.unit); #a; #_;
65 napply (𝐂 a ?); nlapply one; ncases (with_ A a); //;
68 ncoercion uax : ∀u:uAx. Ax ≝ uax on _u : uAx to Ax.
74 @; ##[ @ A (λ_.unit) (λa,x.S a); ##| #_; @; ##]
77 alias id "S" = "cic:/matita/ng/topology/igft/S.fix(0,0,1)".
78 unification hint 0 ≔ ;
80 (* -------------- *) ⊢
84 ∀A:uAx.∀a:uax A. a ◃ ∅ → ¬ a ∈ 𝐂 a one.
87 ##| #b; #i_star; #IH1; #IH2; #H3; nlapply (IH2 … H3); /2/;
91 ndefinition Z : Ω^axs ≝ { x | x ◃ ∅ }.
93 ntheorem cover_monotone: ∀A:Ax.∀a:A.∀U,V.U ⊆ V → a ◃ U → a ◃ V.
94 #A; #a; #U; #V; #HUV; #H; nelim H; /3/;
97 ntheorem th3_1: ¬∃a:axs.Z ⊆ S a ∧ S a ⊆ Z.
100 nlapply (axiom_cond … a one); #AxCon; nchange in AxCon with (a ◃ S a);
101 napply (cover_monotone … AxCon); nassumption; ##] #H;
102 ncut (a ◃ ∅); ##[ napply (transitivity … H); nwhd in match Z; //; ##] #H1;
103 ncut (¬ a ∈ S a); ##[ napply (col2_4 … H1); ##] #H2;
104 ncut (a ∈ S a); ##[ napply ZSa; napply H1; ##] #H3;
108 include "nat/nat.ma".
110 naxiom phi : nat → nat → nat.
112 notation > "ϕ" non associative with precedence 90 for @{ 'phi }.
113 interpretation "phi" 'phi = phi.
115 notation < "ϕ a i" non associative with precedence 90 for @{ 'phi2 $a $i}.
116 interpretation "phi2" 'phi2 a i = (phi a i).
117 notation < "ϕ a" non associative with precedence 90 for @{ 'phi1 $a }.
118 interpretation "phi2" 'phi1 a = (phi a).
120 ndefinition caxs : uAx.
121 @; ##[ @ nat (λ_.unit); #a; #_; napply { x | ϕ a x = O } ##| #_; @; ##]
125 alias id "S" = "cic:/matita/ng/topology/igft/S.fix(0,0,1)".
126 unification hint 0 ≔ ;
128 (* -------------- *) ⊢
131 naxiom h : nat → nat.
133 alias symbol "eq" = "leibnitz's equality".
134 alias symbol "eq" = "setoid1 eq".
135 alias symbol "covers" = "covers".
136 alias symbol "eq" = "leibnitz's equality".
137 naxiom Ph : ∀x.h x = O \liff x ◃ ∅.
140 ∀A:Ax.∀U,V.U ⊆ V → V ⊆ U → ∀a:A.a ◃ U → a ◃ V.
141 #A; #U; #V; #UV; #VU; #a; #aU; nelim aU; /3/;
144 ntheorem th_ch3: ¬∃a:caxs.∀x.ϕ a x = h x.
146 ncut (a ◃ { x | x ◃ ∅}); ##[
147 napply (replace_char … { x | h x = O }); ##[ ##1,2: #x; ncases (Ph x); /2/; ##]
148 napply (replace_char … { x | ϕ a x = O }); ##[##1,2: #x; nrewrite > (H x); //; ##]
149 napply (axiom_cond … a one); ##] #H1;
150 ncut (a ◃ ∅); ##[ napply (transitivity … H1); //; ##] #H2;
151 nlapply (col2_4 …H2); #H3;
152 ncut (a ∈ 𝐂 a one); ##[
153 nnormalize; ncases (Ph a); nrewrite > (H a); /2/; ##] #H4;