Mercurial > hg > Members > kono > Proof > galois
comparison FLutil.agda @ 132:d84f6d7860f0
...
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 07 Sep 2020 20:27:35 +0900 |
parents | d6ae92b8b5bc |
children | 90cd3dd0f09b |
comparison
equal
deleted
inserted
replaced
131:d6ae92b8b5bc | 132:d84f6d7860f0 |
---|---|
17 -- open import Data.List using (List; []; _∷_ ; length ; _++_ ; head ; tail ) renaming (reverse to rev ) | 17 -- open import Data.List using (List; []; _∷_ ; length ; _++_ ; head ; tail ) renaming (reverse to rev ) |
18 open import nat | 18 open import nat |
19 | 19 |
20 open import Symmetric | 20 open import Symmetric |
21 | 21 |
22 | |
23 open import Relation.Nullary | 22 open import Relation.Nullary |
24 open import Data.Empty | 23 open import Data.Empty |
25 open import Relation.Binary.Core | 24 open import Relation.Binary.Core |
26 open import Relation.Binary.Definitions | 25 open import Relation.Binary.Definitions |
27 open import fin | 26 open import fin |
28 open import Putil | 27 open import Putil |
29 open import Gutil | 28 open import Gutil |
30 open import Solvable | 29 open import Solvable |
31 | |
32 open import Relation.Nary using (⌊_⌋; fromWitness) | |
33 open import Data.List.Fresh | |
34 -- open import Data.List.Fresh.Relation.Unary.All | |
35 -- open import Data.List.Fresh.Membership.Setoid | |
36 -- open import Data.List.Fresh.Properties | |
37 | |
38 | |
39 FList : {n : ℕ } → Set | |
40 FList {n} = List# (FL n) ⌊ _f<?_ ⌋ | |
41 | |
42 fr1 : FList | |
43 fr1 = | |
44 ((# 0) :: ((# 0) :: ((# 0 ) :: f0))) ∷# | |
45 ((# 0) :: ((# 1) :: ((# 0 ) :: f0))) ∷# | |
46 ((# 1) :: ((# 0) :: ((# 0 ) :: f0))) ∷# | |
47 ((# 1) :: ((# 1) :: ((# 0 ) :: f0))) ∷# | |
48 ((# 2) :: ((# 0) :: ((# 0 ) :: f0))) ∷# | |
49 ((# 2) :: ((# 1) :: ((# 0 ) :: f0))) ∷# | |
50 [] | |
51 | 30 |
52 fmax : { n : ℕ } → FL n | 31 fmax : { n : ℕ } → FL n |
53 fmax {zero} = f0 | 32 fmax {zero} = f0 |
54 fmax {suc n} = fromℕ< a<sa :: fmax {n} | 33 fmax {suc n} = fromℕ< a<sa :: fmax {n} |
55 | 34 |
72 FL0 {zero} = f0 | 51 FL0 {zero} = f0 |
73 FL0 {suc n} = zero :: FL0 | 52 FL0 {suc n} = zero :: FL0 |
74 | 53 |
75 open import logic | 54 open import logic |
76 | 55 |
77 FL0< : {n : ℕ } → FL0 {suc n} f≤ fmax | 56 FL0≤ : {n : ℕ } → FL0 {n} f≤ fmax |
78 FL0< {zero} = case1 refl | 57 FL0≤ {zero} = case1 refl |
79 FL0< {suc (suc zero)} = case1 (cong (λ k → zero :: k) ? ) | 58 FL0≤ {suc zero} = case1 refl |
80 FL0< {suc n} = {!!} | 59 FL0≤ {suc n} with <-fcmp zero (fromℕ< {n} a<sa) |
60 ... | tri< a ¬b ¬c = case2 (f<n a) | |
61 ... | tri≈ ¬a b ¬c with FL0≤ {n} | |
62 ... | case1 x = case1 (subst₂ (λ j k → (zero :: FL0) ≡ (j :: k ) ) b x refl ) | |
63 ... | case2 x = case2 (subst (λ k → (zero :: FL0) f< (k :: fmax)) b (f<t x) ) | |
81 | 64 |
82 fsuc : { n : ℕ } → (x : FL n ) → x f< fmax → FL n | 65 fsuc : { n : ℕ } → (x : FL n ) → x f< fmax → FL n |
83 fsuc {n} (x :: y) (f<n lt) = fromℕ< fsuc1 :: y where | 66 fsuc {n} (x :: y) (f<n lt) = fromℕ< fsuc1 :: y where |
84 fsuc2 : toℕ x < toℕ (fromℕ< a<sa) | 67 fsuc2 : toℕ x < toℕ (fromℕ< a<sa) |
85 fsuc2 = lt | 68 fsuc2 = lt |
86 fsuc1 : suc (toℕ x) < n | 69 fsuc1 : suc (toℕ x) < n |
87 fsuc1 = ≤-trans (s≤s lt) ( s≤s ( toℕ≤pred[n] (fromℕ< a<sa)) ) | 70 fsuc1 = ≤-trans (s≤s lt) ( s≤s ( toℕ≤pred[n] (fromℕ< a<sa)) ) |
88 fsuc (x :: y) (f<t lt) = x :: fsuc y lt | 71 fsuc (x :: y) (f<t lt) = x :: fsuc y lt |
89 | 72 |
90 flist : {n : ℕ } → FList {n} | 73 open import Data.List |
91 flist {zero} = [] | 74 |
92 flist {suc n} = flist0 FL0 {!!} where | 75 flist1 : {n : ℕ } (i : ℕ) → i < suc n → List (FL n) → List (FL n) → List (FL (suc n)) |
93 flist0 : (x : FL n) → x f< fmax → FList {suc n} | 76 flist1 zero i<n [] _ = [] |
94 flist0 = {!!} | 77 flist1 zero i<n (a ∷ x ) z = ( zero :: a ) ∷ flist1 zero i<n x z |
78 flist1 (suc i) (s≤s i<n) [] z = flist1 i (<-trans i<n a<sa) z z | |
79 flist1 (suc i) i<n (a ∷ x ) z = ((fromℕ< i<n ) :: a ) ∷ flist1 (suc i) i<n x z | |
80 | |
81 flist : {n : ℕ } → FL n → List (FL n) | |
82 flist {zero} f0 = f0 ∷ [] | |
83 flist {suc n} (x :: y) = flist1 n a<sa (flist y) (flist y) | |
95 | 84 |
96 fr22 : fsuc (zero :: zero :: f0) (fmax¬ (λ ())) ≡ (suc zero :: zero :: f0) | 85 fr22 : fsuc (zero :: zero :: f0) (fmax¬ (λ ())) ≡ (suc zero :: zero :: f0) |
97 fr22 = refl | 86 fr22 = refl |
98 | 87 |
99 fr2 = uncons fr1 | 88 fr4 : List (FL 4) |
89 fr4 = Data.List.reverse (flist (fmax {4}) ) | |
100 | 90 |
101 fr3 : FList | 91 fr5 : List (List ℕ) |
102 fr3 = | 92 fr5 = map plist (map FL→perm (Data.List.reverse (flist (fmax {4}) ))) |
103 ((# 2) :: ((# 1) :: ((# 0 ) :: f0))) ∷# [] | |
104 | |
105 -- fr4 : FList | |
106 -- fr4 = append-# ? ? fr2 fr3 |