# HG changeset patch # User Shinji KONO # Date 1599958113 -32400 # Node ID c00eac825964dc3f2a666e0e3953fad4e4805caa # Parent 5e5e6cd7da2ea107a33cec541f908a9e3504af94 FLutil diff -r 5e5e6cd7da2e -r c00eac825964 FL.agda --- a/FL.agda Sun Sep 13 09:33:57 2020 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,165 +0,0 @@ -module FL where - -open import Level hiding ( suc ; zero ) -open import Data.Fin hiding ( _<_ ; _≤_ ; _-_ ; _+_ ; _≟_) -open import Data.Fin.Properties hiding ( <-trans ; ≤-trans ; ≤-irrelevant ; _≟_ ) renaming ( <-cmp to <-fcmp ) -open import Data.Fin.Permutation -open import Data.Nat -- using (ℕ; suc; zero; s≤s ; z≤n ) -open import Relation.Binary.PropositionalEquality -open import Data.List using (List; []; _∷_ ; length ; _++_ ; head ; tail ) renaming (reverse to rev ) -open import Data.Product -open import Relation.Nullary -open import Data.Empty -open import Relation.Binary.Core -open import Relation.Binary.Definitions -open import logic -open import nat - -infixr 100 _::_ - -data FL : (n : ℕ )→ Set where - f0 : FL 0 - _::_ : { n : ℕ } → Fin (suc n ) → FL n → FL (suc n) - -data _f<_ : {n : ℕ } (x : FL n ) (y : FL n) → Set where - f : {n : ℕ } {x : FL n } {y : FL n} → x f< y → y f< x → ⊥ -f-<> (f x x₁ -f-<> (f (f (f lt lt2 - -f-≡< : {n : ℕ } {x : FL n } {y : FL n} → x ≡ y → y f< x → ⊥ -f-≡< refl (f lt (f ¬a ¬b c = tri> (λ lt → f-<> lt (f lt (f ¬a₁ ¬b c = tri> (λ lt → f-<> lt (f ¬a ¬b c = no ( ¬a ) - -_f≤_ : {n : ℕ } (x : FL n ) (y : FL n) → Set -_f≤_ x y = (x ≡ y ) ∨ (x f< y ) - -FL0 : {n : ℕ } → FL n -FL0 {zero} = f0 -FL0 {suc n} = zero :: FL0 - - -fmax : { n : ℕ } → FL n -fmax {zero} = f0 -fmax {suc n} = fromℕ< a (fmax1 x) lt where - fmax1 : {n : ℕ } → (x : Fin (suc n)) → toℕ x ≤ toℕ (fromℕ< {n} a ¬a ¬b c = ⊥-elim (fmax< c) - -FL0≤ : {n : ℕ } → FL0 {n} f≤ fmax -FL0≤ {zero} = case1 refl -FL0≤ {suc zero} = case1 refl -FL0≤ {suc n} with <-fcmp zero (fromℕ< {n} a ¬a ¬b lt with FLinsert x [] | inspect ( FLinsert x ) [] -... | [] | () -... | cons a₁ t x₂ | e = cons a ( x ∷# [] ) ( Level.lift (fromWitness lt) , Level.lift tt ) -FLinsert {suc n} x (cons a y yr) | tri> ¬a ¬b a ¬a ¬b b ¬a ¬b b ¬a ¬b b : {n : ℕ } {x : FL n } {y : FL n} → x f< y → y f< x → ⊥ +f-<> (f x x₁ +f-<> (f (f (f lt lt2 + +f-≡< : {n : ℕ } {x : FL n } {y : FL n} → x ≡ y → y f< x → ⊥ +f-≡< refl (f lt (f ¬a ¬b c = tri> (λ lt → f-<> lt (f lt (f ¬a₁ ¬b c = tri> (λ lt → f-<> lt (f ¬a ¬b c = no ( ¬a ) + +_f≤_ : {n : ℕ } (x : FL n ) (y : FL n) → Set +_f≤_ x y = (x ≡ y ) ∨ (x f< y ) + +FL0 : {n : ℕ } → FL n +FL0 {zero} = f0 +FL0 {suc n} = zero :: FL0 + fmax : { n : ℕ } → FL n fmax {zero} = f0 @@ -47,12 +89,6 @@ ... | tri≈ ¬a b ¬c = ⊥-elim ( ne b) ... | tri> ¬a ¬b c = ⊥-elim (fmax< c) -FL0 : {n : ℕ } → FL n -FL0 {zero} = f0 -FL0 {suc n} = zero :: FL0 - -open import logic - FL0≤ : {n : ℕ } → FL0 {n} f≤ fmax FL0≤ {zero} = case1 refl FL0≤ {suc zero} = case1 refl @@ -62,20 +98,19 @@ ... | case1 x = case1 (subst₂ (λ j k → (zero :: FL0) ≡ (j :: k ) ) b x refl ) ... | case2 x = case2 (subst (λ k → (zero :: FL0) f< (k :: fmax)) b (f ¬a ¬b c with FLcons x y -... | [] = a ∷# [] -... | cons a₁ t x₂ = cons a ( cons a₁ t x₂ ) FLcons2 where - FLcons2 : fresh (FL (suc n)) ⌊ _f ¬a ¬b lt with FLinsert x [] | inspect ( FLinsert x ) [] +... | [] | () +... | cons a₁ t x₂ | e = cons a ( x ∷# [] ) ( Level.lift (fromWitness lt) , Level.lift tt ) +FLinsert {suc n} x (cons a y yr) | tri> ¬a ¬b a ¬a ¬b b ¬a ¬b b ¬a ¬b b