Guest User

Derive.agda

a guest
Apr 15th, 2020
388
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module Derive where
  2.   open import Data.Product using (_×_; _,_)
  3.   open import Data.Sum using (_⊎_; inj₁; inj₂)
  4.   open import Data.Unit using ()
  5.   open import Data.Empty using ()
  6.   open import Data.Nat using (ℕ ; suc ; zero ; _+_)
  7.   open import Data.Fin using (Fin ; inject₁ ; suc ; zero)
  8.   open import Data.Fin.Properties using (_≟_)
  9.   open import Relation.Nullary using (yes ; no)
  10.   open import Agda.Builtin.Equality using (refl)
  11.  
  12.   -- Regular universe, multivariate.
  13.   -- |n| defines the number of variables
  14.   data Reg : ℕ → Set₁ where
  15.     0′    : {n :} → Reg n
  16.     1′    : {n :} → Reg n
  17.     I     : {n :} → Fin n → Reg n
  18.     _⨁_  : {n :}(l r : Reg n) → Reg n
  19.     _⨂_  : {n :}(l r : Reg n) → Reg n
  20.     μ′    : {n :} → Reg (suc n)   → Reg n
  21.  
  22.   infixl 30 _⨁_
  23.   infixl 40 _⨂_
  24.  
  25.   data Env : ℕ → Set₁ where
  26.     []  : Env 0
  27.     _,_ : {n :} → Reg n → Env n → Env (suc n)
  28.  
  29.   mutual
  30.     ⟦_⟧ : {n :} → Reg n → Env n → Set
  31.     ⟦ 0′ ⟧  _ =
  32.     ⟦ 1′ ⟧  _ =
  33.     ⟦ I zero  ⟧   (X , Xs) = ⟦ X ⟧  Xs  
  34.     ⟦ I (suc n)(X , Xs) = ⟦ I n ⟧ Xs  
  35.     ⟦ L ⨁ R ⟧ Xs = ⟦ L ⟧ Xs ⊎ ⟦ R ⟧ Xs
  36.     ⟦ L ⨂ R ⟧ Xs = ⟦ L ⟧ Xs × ⟦ R ⟧ Xs
  37.     ⟦  μ′ F  ⟧ Xs =  μ F Xs
  38.  
  39.     data μ {n :} (F : Reg (suc n)) (Xs : Env n) : Set where
  40.       ⟨_⟩ : ⟦ F ⟧ (μ′ F , Xs) → μ F Xs
  41.  
  42.   inject₁ᵣ : {n :} → Reg n → Reg (suc n)
  43.   inject₁ᵣ 0′       = 0
  44.   inject₁ᵣ 1′       = 1
  45.   inject₁ᵣ (I x)    =  I (inject₁ x)
  46.   inject₁ᵣ (L ⨁ R) = (inject₁ᵣ L)(inject₁ᵣ R)
  47.   inject₁ᵣ (L ⨂ R) = (inject₁ᵣ L)(inject₁ᵣ R)
  48.   inject₁ᵣ (μ′ F)   = μ′ (inject₁ᵣ F)
  49.  
  50.   infixl 50 _[_]
  51.   infixl 50 ^_
  52.  
  53.   _[_]  : {n :} → Reg (suc n) → Reg n → Reg n
  54.   0[ G ]        = 0
  55.   1[ G ]        = 1
  56.   I zero [ G ]    = G
  57.   I (suc x) [ G ] = I x
  58.   (L ⨁ R) [ G ]  = L [ G ] ⨁ R [ G ]
  59.   (L ⨂ R) [ G ]  = L [ G ] ⨂ R [ G ]
  60.   μ′ F [ G ]      = μ′ (F [ inject₁ᵣ G ])
  61.  
  62.  
  63.   ^_ : {n :} → Reg n → Reg (suc n)
  64.   ^ 0′       = 0
  65.   ^ 1′       = 1
  66.   ^ I x      = I (suc x)
  67.   ^ (L ⨁ R) = ^ L ⨁ ^ R
  68.   ^ (L ⨂ R) = ^ L ⨂ ^ R
  69.   ^ μ′ F     = μ′ (inject₁ᵣ F)
  70.  
  71.   derive : {n :}(i : Fin n) → Reg n → Reg n
  72.   derive = {!!}
  73.  
  74.  
  75.   {-
  76.   derive {zero} ()
  77.   derive {suc _} i 0′ = 0′
  78.   derive {suc _} i 1′ = 0′
  79.   derive {suc _} i (I j) with i ≟ j
  80.   derive {suc _} i (I j) | yes refl = 1′
  81.   ...                    | no _     = 0′
  82.   derive {suc _} i (L ⨁ R) = derive i L ⨁ derive i R
  83.   derive {suc _} i (L ⨂ R) = (derive i L ⨂ R) ⨁ (L ⨂ derive i R)
  84.   derive {suc n} i (μ′ F) = μ′ ( 1′ ⨁ ((derive zero (^ (F [ μ′  F ])) ⨂ I zero))) ⨂ (derive (suc i)  F [ μ′ F ])
  85.   -}
Add Comment
Please, Sign In to add comment