annotate src/ODC.agda @ 474:100ceb0fbada

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Thu, 31 Mar 2022 10:02:23 +0900
parents d61f4a89c99e
children 30da20261771
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
431
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 {-# OPTIONS --allow-unsolved-metas #-}
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 open import Level
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 open import Ordinals
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 module ODC {n : Level } (O : Ordinals {n} ) where
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 open import zf
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 open import Data.Nat renaming ( zero to Zero ; suc to Suc ; ℕ to Nat ; _⊔_ to _n⊔_ )
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 open import Relation.Binary.PropositionalEquality
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 open import Data.Nat.Properties
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 open import Data.Empty
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 open import Relation.Nullary
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 open import Relation.Binary
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 open import Relation.Binary.Core
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 import OrdUtil
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 open import logic
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 open import nat
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 import OD
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 import ODUtil
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 open inOrdinal O
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 open OD O
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 open OD.OD
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 open OD._==_
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 open ODAxiom odAxiom
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 open ODUtil O
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 open Ordinals.Ordinals O
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 open Ordinals.IsOrdinals isOrdinal
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 open Ordinals.IsNext isNext
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 open OrdUtil O
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 open HOD
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 open _∧_
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 postulate
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 -- mimimul and x∋minimal is an Axiom of choice
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 minimal : (x : HOD ) → ¬ (x =h= od∅ )→ HOD
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 -- this should be ¬ (x =h= od∅ )→ ∃ ox → x ∋ Ord ox ( minimum of x )
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 x∋minimal : (x : HOD ) → ( ne : ¬ (x =h= od∅ ) ) → odef x ( & ( minimal x ne ) )
467
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 466
diff changeset
43 -- minimality (proved by ε-induction with LEM)
431
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 minimal-1 : (x : HOD ) → ( ne : ¬ (x =h= od∅ ) ) → (y : HOD ) → ¬ ( odef (minimal x ne) (& y)) ∧ (odef x (& y) )
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
45
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
46
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 --
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 -- Axiom of choice in intutionistic logic implies the exclude middle
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 -- https://plato.stanford.edu/entries/axiom-choice/#AxiChoLog
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 --
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
51
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 pred-od : ( p : Set n ) → HOD
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
53 pred-od p = record { od = record { def = λ x → (x ≡ o∅) ∧ p } ;
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 odmax = osuc o∅; <odmax = λ x → subst (λ k → k o< osuc o∅) (sym (proj1 x)) <-osuc }
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
55
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
56 ppp : { p : Set n } { a : HOD } → pred-od p ∋ a → p
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
57 ppp {p} {a} d = proj2 d
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
58
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
59 p∨¬p : ( p : Set n ) → p ∨ ( ¬ p ) -- assuming axiom of choice
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
60 p∨¬p p with is-o∅ ( & (pred-od p ))
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
61 p∨¬p p | yes eq = case2 (¬p eq) where
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
62 ps = pred-od p
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
63 eqo∅ : ps =h= od∅ → & ps ≡ o∅
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
64 eqo∅ eq = subst (λ k → & ps ≡ k) ord-od∅ ( cong (λ k → & k ) (==→o≡ eq))
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
65 lemma : ps =h= od∅ → p → ⊥
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 lemma eq p0 = ¬x<0 {& ps} (eq→ eq record { proj1 = eqo∅ eq ; proj2 = p0 } )
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
67 ¬p : (& ps ≡ o∅) → p → ⊥
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
68 ¬p eq = lemma ( subst₂ (λ j k → j =h= k ) *iso o∅≡od∅ ( o≡→== eq ))
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
69 p∨¬p p | no ¬p = case1 (ppp {p} {minimal ps (λ eq → ¬p (eqo∅ eq))} lemma) where
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
70 ps = pred-od p
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
71 eqo∅ : ps =h= od∅ → & ps ≡ o∅
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
72 eqo∅ eq = subst (λ k → & ps ≡ k) ord-od∅ ( cong (λ k → & k ) (==→o≡ eq))
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
73 lemma : ps ∋ minimal ps (λ eq → ¬p (eqo∅ eq))
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
74 lemma = x∋minimal ps (λ eq → ¬p (eqo∅ eq))
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
75
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
76 decp : ( p : Set n ) → Dec p -- assuming axiom of choice
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
77 decp p with p∨¬p p
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
78 decp p | case1 x = yes x
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
79 decp p | case2 x = no x
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
80
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
81 ∋-p : (A x : HOD ) → Dec ( A ∋ x )
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
82 ∋-p A x with p∨¬p ( A ∋ x ) -- LEM
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
83 ∋-p A x | case1 t = yes t
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
84 ∋-p A x | case2 t = no (λ x → t x)
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
85
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
86 double-neg-eilm : {A : Set n} → ¬ ¬ A → A -- we don't have this in intutionistic logic
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
87 double-neg-eilm {A} notnot with decp A -- assuming axiom of choice
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
88 ... | yes p = p
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
89 ... | no ¬p = ⊥-elim ( notnot ¬p )
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
90
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
91 open _⊆_
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
92
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
93 power→⊆ : ( A t : HOD) → Power A ∋ t → t ⊆ A
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
94 power→⊆ A t PA∋t = record { incl = λ {x} t∋x → double-neg-eilm (t1 t∋x) } where
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
95 t1 : {x : HOD } → t ∋ x → ¬ ¬ (A ∋ x)
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
96 t1 = power→ A t PA∋t
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
97
447
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 431
diff changeset
98 power-∩ : { A x y : HOD } → Power A ∋ x → Power A ∋ y → Power A ∋ ( x ∩ y )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 431
diff changeset
99 power-∩ {A} {x} {y} ax ay = power← A (x ∩ y) p01 where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 431
diff changeset
100 p01 : {z : HOD} → (x ∩ y) ∋ z → A ∋ z
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 431
diff changeset
101 p01 {z} xyz = double-neg-eilm ( power→ A x ax (proj1 xyz ))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 431
diff changeset
102
431
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
103 OrdP : ( x : Ordinal ) ( y : HOD ) → Dec ( Ord x ∋ y )
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
104 OrdP x y with trio< x (& y)
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
105 OrdP x y | tri< a ¬b ¬c = no ¬c
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
106 OrdP x y | tri≈ ¬a refl ¬c = no ( o<¬≡ refl )
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
107 OrdP x y | tri> ¬a ¬b c = yes c
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
108
470
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 469
diff changeset
109 -- open import Relation.Binary.HeterogeneousEquality as HE -- using (_≅_;refl)
469
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 468
diff changeset
110
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 468
diff changeset
111 record Element (A : HOD) : Set (suc n) where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 468
diff changeset
112 field
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 468
diff changeset
113 elm : HOD
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 468
diff changeset
114 is-elm : A ∋ elm
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 468
diff changeset
115
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 468
diff changeset
116 open Element
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 468
diff changeset
117
468
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 467
diff changeset
118 TotalOrderSet : ( A : HOD ) → (_<_ : (x y : HOD) → Set n ) → Set (suc n)
469
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 468
diff changeset
119 TotalOrderSet A _<_ = Trichotomous (λ (x : Element A) y → elm x ≡ elm y ) (λ x y → elm x < elm y )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 468
diff changeset
120
470
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 469
diff changeset
121 PartialOrderSet : ( A : HOD ) → (_<_ : (x y : HOD) → Set n ) → Set (suc n)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 469
diff changeset
122 PartialOrderSet A _<_ = (a b : Element A)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 469
diff changeset
123 → (elm a < elm b → (¬ (elm b < elm a) ∧ (¬ (elm a ≡ elm b) ))) ∧ (elm a ≡ elm b → (¬ elm a < elm b) ∧ (¬ elm b < elm a))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 469
diff changeset
124
469
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 468
diff changeset
125 me : { A a : HOD } → A ∋ a → Element A
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 468
diff changeset
126 me {A} {a} lt = record { elm = a ; is-elm = lt }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 468
diff changeset
127
464
5acf6483a9e3 Zorn lemma start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 447
diff changeset
128 record SUP ( A B : HOD ) (_<_ : (x y : HOD) → Set n ) : Set (suc n) where
5acf6483a9e3 Zorn lemma start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 447
diff changeset
129 field
5acf6483a9e3 Zorn lemma start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 447
diff changeset
130 sup : HOD
5acf6483a9e3 Zorn lemma start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 447
diff changeset
131 A∋maximal : A ∋ sup
469
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 468
diff changeset
132 x≤sup : {x : HOD} → B ∋ x → (x ≡ sup ) ∨ (x < sup )
464
5acf6483a9e3 Zorn lemma start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 447
diff changeset
133
5acf6483a9e3 Zorn lemma start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 447
diff changeset
134 record Maximal ( A : HOD ) (_<_ : (x y : HOD) → Set n ) : Set (suc n) where
5acf6483a9e3 Zorn lemma start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 447
diff changeset
135 field
5acf6483a9e3 Zorn lemma start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 447
diff changeset
136 maximal : HOD
472
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 471
diff changeset
137 A∋maximal : A ∋ maximal
469
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 468
diff changeset
138 ¬maximal<x : {x : HOD} → A ∋ x → ¬ maximal < x
464
5acf6483a9e3 Zorn lemma start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 447
diff changeset
139
467
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 466
diff changeset
140 record ZChain ( A : HOD ) (y : Ordinal) (_<_ : (x y : HOD) → Set n ) : Set (suc n) where
464
5acf6483a9e3 Zorn lemma start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 447
diff changeset
141 field
467
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 466
diff changeset
142 B : HOD
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 466
diff changeset
143 B⊆A : B ⊆ A
468
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 467
diff changeset
144 total : TotalOrderSet B _<_
467
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 466
diff changeset
145 fb : {x : HOD } → A ∋ x → HOD
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 466
diff changeset
146 B∋fb : (x : HOD ) → (ax : A ∋ x) → B ∋ fb ax
472
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 471
diff changeset
147 ¬x≤sup : (sup : HOD) → (as : A ∋ sup ) → & sup o< osuc y → sup < fb as
464
5acf6483a9e3 Zorn lemma start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 447
diff changeset
148
5acf6483a9e3 Zorn lemma start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 447
diff changeset
149 Zorn-lemma : { A : HOD } → { _<_ : (x y : HOD) → Set n }
5acf6483a9e3 Zorn lemma start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 447
diff changeset
150 → o∅ o< & A
471
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 470
diff changeset
151 → ( {a b c : HOD} → a < b → b < c → a < c )
470
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 469
diff changeset
152 → PartialOrderSet A _<_
468
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 467
diff changeset
153 → ( ( B : HOD) → (B⊆A : B ⊆ A) → TotalOrderSet B _<_ → SUP A B _<_ )
464
5acf6483a9e3 Zorn lemma start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 447
diff changeset
154 → Maximal A _<_
471
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 470
diff changeset
155 Zorn-lemma {A} {_<_} 0<A TR PO supP = zorn00 where
472
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 471
diff changeset
156 someA : HOD
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 471
diff changeset
157 someA = minimal A (λ eq → ¬x<0 ( subst (λ k → o∅ o< k ) (=od∅→≡o∅ eq) 0<A ))
473
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 472
diff changeset
158 isSomeA : A ∋ someA
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 472
diff changeset
159 isSomeA = x∋minimal A (λ eq → ¬x<0 ( subst (λ k → o∅ o< k ) (=od∅→≡o∅ eq) 0<A ))
467
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 466
diff changeset
160 HasMaximal : HOD
474
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 473
diff changeset
161 HasMaximal = record { od = record { def = λ x → odef A x → (m : Ordinal) → odef A m → ¬ (* x < * m)} ; odmax = & A ; <odmax = {!!} } where
472
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 471
diff changeset
162 z07 : {y : Ordinal} → ((m : Ordinal) → odef A y ∧ odef A m ∧ (¬ (* y < * m))) → y o< & A
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 471
diff changeset
163 z07 {y} p = subst (λ k → k o< & A) &iso ( c<→o< (subst (λ k → odef A k ) (sym &iso ) (proj1 (p (& someA)) )))
474
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 473
diff changeset
164 no-maximum : HasMaximal =h= od∅ → (x : Ordinal) → odef A x → ((m : Ordinal) → odef A m → ¬ (* x < * m) ) → ⊥
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 473
diff changeset
165 no-maximum nomx x ax P = ¬x<0 (eq→ nomx {x} (λ ax m am → P m am ))
472
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 471
diff changeset
166 Gtx : { x : HOD} → A ∋ x → HOD
473
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 472
diff changeset
167 Gtx {x} ax = record { od = record { def = λ y → odef A y → (x < (* y)) ∧ ( (& x) o< y ) } ; odmax = & A ; <odmax = {!!} }
474
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 473
diff changeset
168 no-gtx : { x : HOD} → (ax : A ∋ x ) → Gtx ax =h= od∅ → (( y : Ordinal) → odef A y → (x < (* y)) ∧ ( (& x) o< y )) → ⊥
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 473
diff changeset
169 no-gtx {x} ax nogt P = ¬x<0 (eq→ nogt (λ am → P (& x) am ))
470
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 469
diff changeset
170 z01 : {a b : HOD} → A ∋ a → A ∋ b → (a ≡ b ) ∨ (a < b ) → b < a → ⊥
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 469
diff changeset
171 z01 {a} {b} A∋a A∋b (case1 a=b) b<a = proj1 (proj2 (PO (me A∋b) (me A∋a)) (sym a=b)) b<a
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 469
diff changeset
172 z01 {a} {b} A∋a A∋b (case2 a<b) b<a = proj1 (PO (me A∋b) (me A∋a)) b<a ⟪ a<b , (λ b=a → proj1 (proj2 (PO (me A∋b) (me A∋a)) b=a ) b<a ) ⟫
467
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 466
diff changeset
173 ZChain→¬SUP : (z : ZChain A (& A) _<_ ) → ¬ (SUP A (ZChain.B z) _<_ )
470
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 469
diff changeset
174 ZChain→¬SUP z sp = ⊥-elim (z02 (ZChain.fb z (SUP.A∋maximal sp)) (ZChain.B∋fb z _ (SUP.A∋maximal sp)) (ZChain.¬x≤sup z _ (SUP.A∋maximal sp) z03 )) where
472
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 471
diff changeset
175 z03 : & (SUP.sup sp) o< osuc (& A)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 471
diff changeset
176 z03 = ordtrans (c<→o< (SUP.A∋maximal sp)) <-osuc
470
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 469
diff changeset
177 z02 : (x : HOD) → ZChain.B z ∋ x → SUP.sup sp < x → ⊥
473
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 472
diff changeset
178 z02 x xe s<x = z01 (incl (ZChain.B⊆A z) xe) (SUP.A∋maximal sp) (SUP.x≤sup sp xe) s<x
471
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 470
diff changeset
179 ind : HasMaximal =h= od∅
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 470
diff changeset
180 → (x : Ordinal) → ((y : Ordinal) → y o< x → ZChain A y _<_ )
464
5acf6483a9e3 Zorn lemma start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 447
diff changeset
181 → ZChain A x _<_
471
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 470
diff changeset
182 ind nomx x prev with Oprev-p x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 470
diff changeset
183 ... | yes op with ∋-p A (* x)
473
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 472
diff changeset
184 ... | no ¬Ax = record { B = ZChain.B zc1 ; B⊆A = ZChain.B⊆A zc1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 472
diff changeset
185 ; total = ZChain.total zc1 ; fb = ZChain.fb zc1 ; B∋fb = ZChain.B∋fb zc1 ; ¬x≤sup = z04 } where
471
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 470
diff changeset
186 px = Oprev.oprev op
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 470
diff changeset
187 zc1 : ZChain A px _<_
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 470
diff changeset
188 zc1 = prev px (subst (λ k → px o< k) (Oprev.oprev=x op) <-osuc)
472
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 471
diff changeset
189 z04 : (sup : HOD) (as : A ∋ sup) → & sup o< osuc x → sup < ZChain.fb zc1 as
471
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 470
diff changeset
190 z04 sup as s<x with trio< (& sup) x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 470
diff changeset
191 ... | tri≈ ¬a b ¬c = ⊥-elim (¬Ax (subst (λ k → odef A k) (trans b (sym &iso)) as) )
472
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 471
diff changeset
192 ... | tri< a ¬b ¬c = ZChain.¬x≤sup zc1 _ as ( subst (λ k → & sup o< k ) (sym (Oprev.oprev=x op)) a )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 471
diff changeset
193 ... | tri> ¬a ¬b c with osuc-≡< s<x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 471
diff changeset
194 ... | case1 eq = ⊥-elim (¬Ax (subst (λ k → odef A k) (trans eq (sym &iso)) as) )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 471
diff changeset
195 ... | case2 lt = ⊥-elim (¬a lt )
473
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 472
diff changeset
196 ... | yes ax = z06 where
472
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 471
diff changeset
197 px = Oprev.oprev op
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 471
diff changeset
198 zc1 : ZChain A px _<_
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 471
diff changeset
199 zc1 = prev px (subst (λ k → px o< k) (Oprev.oprev=x op) <-osuc)
473
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 472
diff changeset
200 z06 : ZChain A x _<_
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 472
diff changeset
201 z06 with is-o∅ (& (Gtx ax))
474
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 473
diff changeset
202 ... | yes nogt = ⊥-elim (no-maximum nomx x (subst (λ k → odef A k) &iso ax) z06-is-maximal ) where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 473
diff changeset
203 z06-is-maximal : (m : Ordinal ) → odef A m → ¬ ( * x < * m )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 473
diff changeset
204 z06-is-maximal m am = z07 where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 473
diff changeset
205 z07 : ¬ ( * x < * m )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 473
diff changeset
206 z07 x<m = proj1 (PO (me ax) (me (subst (λ k → odef A k) (sym &iso) am))) x<m ⟪ {!!} , {!!} ⟫
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 473
diff changeset
207 z08 : ( ( y : Ordinal) → odef A y → (* x < (* y)) ∧ ( (& (* x)) o< y )) → ⊥
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 473
diff changeset
208 z08 p = no-gtx ax (≡o∅→=od∅ nogt) (λ y ay → p y ay )
473
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 472
diff changeset
209 ... | no not = record { B = ZChain.B (prev px (subst (λ k → px o< k ) (Oprev.oprev=x op) <-osuc)) , * x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 472
diff changeset
210 ; B⊆A = {!!} ; total = {!!} ; fb = {!!} ; B∋fb = {!!} ; ¬x≤sup = {!!} }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 472
diff changeset
211 -- minimal (Gtx ax) (λ eq → not (=od∅→≡o∅ eq))
471
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 470
diff changeset
212 ind nomx x prev | no ¬ox with trio< (& A) x
466
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 465
diff changeset
213 ... | tri< a ¬b ¬c = {!!}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 465
diff changeset
214 ... | tri≈ ¬a b ¬c = {!!}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 465
diff changeset
215 ... | tri> ¬a ¬b c = {!!}
467
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 466
diff changeset
216 zorn00 : Maximal A _<_
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 466
diff changeset
217 zorn00 with is-o∅ ( & HasMaximal )
472
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 471
diff changeset
218 ... | no not = record { maximal = minimal HasMaximal (λ eq → not (=od∅→≡o∅ eq)) ; A∋maximal = zorn01 ; ¬maximal<x = zorn02 } where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 471
diff changeset
219 zorn03 : odef HasMaximal ( & ( minimal HasMaximal (λ eq → not (=od∅→≡o∅ eq)) ) )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 471
diff changeset
220 zorn03 = x∋minimal HasMaximal (λ eq → not (=od∅→≡o∅ eq))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 471
diff changeset
221 zorn01 : A ∋ minimal HasMaximal (λ eq → not (=od∅→≡o∅ eq))
474
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 473
diff changeset
222 zorn01 = {!!} -- proj1 (zorn03 ? ? (& someA) isSomeA )
472
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 471
diff changeset
223 zorn02 : {x : HOD} → A ∋ x → ¬ (minimal HasMaximal (λ eq → not (=od∅→≡o∅ eq)) < x)
474
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 473
diff changeset
224 zorn02 {x} ax m<x = {!!} -- proj2 (zorn03 (& x) ax) (subst₂ (λ j k → j < k) (sym *iso) (sym *iso) m<x )
471
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 470
diff changeset
225 ... | yes ¬Maximal = ⊥-elim ( ZChain→¬SUP (z (& A) (≡o∅→=od∅ ¬Maximal)) ( supP B (ZChain.B⊆A (z (& A) (≡o∅→=od∅ ¬Maximal))) (ZChain.total (z (& A) (≡o∅→=od∅ ¬Maximal))) )) where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 470
diff changeset
226 z : (x : Ordinal) → HasMaximal =h= od∅ → ZChain A x _<_
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 470
diff changeset
227 z x nomx = TransFinite (ind nomx) x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 470
diff changeset
228 B = ZChain.B (z (& A) (≡o∅→=od∅ ¬Maximal) )
464
5acf6483a9e3 Zorn lemma start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 447
diff changeset
229
431
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
230 open import zfc
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
231
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
232 HOD→ZFC : ZFC
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
233 HOD→ZFC = record {
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
234 ZFSet = HOD
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
235 ; _∋_ = _∋_
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
236 ; _≈_ = _=h=_
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
237 ; ∅ = od∅
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
238 ; Select = Select
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
239 ; isZFC = isZFC
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
240 } where
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
241 -- infixr 200 _∈_
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
242 -- infixr 230 _∩_ _∪_
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
243 isZFC : IsZFC (HOD ) _∋_ _=h=_ od∅ Select
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
244 isZFC = record {
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
245 choice-func = choice-func ;
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
246 choice = choice
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
247 } where
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
248 -- Axiom of choice ( is equivalent to the existence of minimal in our case )
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
249 -- ∀ X [ ∅ ∉ X → (∃ f : X → ⋃ X ) → ∀ A ∈ X ( f ( A ) ∈ A ) ]
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
250 choice-func : (X : HOD ) → {x : HOD } → ¬ ( x =h= od∅ ) → ( X ∋ x ) → HOD
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
251 choice-func X {x} not X∋x = minimal x not
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
252 choice : (X : HOD ) → {A : HOD } → ( X∋A : X ∋ A ) → (not : ¬ ( A =h= od∅ )) → A ∋ choice-func X not X∋A
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
253 choice X {A} X∋A not = x∋minimal A not
a5f8084b8368 reorganiztion for apkg
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
254