diff options
author | Chloe Brown <chloe.brown.00@outlook.com> | 2021-04-05 20:18:53 +0100 |
---|---|---|
committer | Chloe Brown <chloe.brown.00@outlook.com> | 2021-04-05 20:18:53 +0100 |
commit | 49a2df1e3a210cd8be69afb33f8a3b5e20e41129 (patch) | |
tree | d6c2e90123ac1ebd5a76afea8328fd3c9a3e8ccc /src/Cfe/Expression/Base.agda | |
parent | aaeb5a3572e96e32abbad5a137f5fc14575a8d66 (diff) |
Clean up the Expression hierarchy.
Diffstat (limited to 'src/Cfe/Expression/Base.agda')
-rw-r--r-- | src/Cfe/Expression/Base.agda | 155 |
1 files changed, 73 insertions, 82 deletions
diff --git a/src/Cfe/Expression/Base.agda b/src/Cfe/Expression/Base.agda index 1cd57a7..f37694b 100644 --- a/src/Cfe/Expression/Base.agda +++ b/src/Cfe/Expression/Base.agda @@ -1,104 +1,95 @@ {-# OPTIONS --without-K --safe #-} -open import Function -open import Relation.Binary -import Relation.Binary.PropositionalEquality as ā” +open import Relation.Binary using (REL; Setoid) module Cfe.Expression.Base {c ā} (over : Setoid c ā) where -open Setoid over renaming (Carrier to C) +open Setoid over using () renaming (Carrier to C) -open import Cfe.Language over as š -open import Cfe.Language.Construct.Concatenate over renaming (_ā_ to _āā_) -open import Cfe.Language.Construct.Single over -open import Cfe.Language.Construct.Union over -open import Cfe.Language.Indexed.Construct.Iterate over -open import Data.Fin as F hiding (_ā¤_; cast) -open import Data.Nat as ā hiding (_ā¤_; _ā_) -open import Data.Product +open import Cfe.Language over renaming (_ā_ to _āĖ”_; _ā_ to _āĖ”_) +open import Data.Fin hiding (_+_; _<_) +open import Data.Nat hiding (_ā_; _ā_) open import Data.Vec -open import Level renaming (suc to lsuc) hiding (Lift) -open import Relation.Binary.PropositionalEquality -open import Relation.Nullary +open import Function using (_on_) +open import Relation.Nullary using (yes; no) -infix 10 _[_/_] +private + variable + m n : ā + +------------------------------------------------------------------------ +-- Definition + +infix 8 μ_ infix 7 _ā_ infix 6 _āØ_ -infix 4 _ā_ data Expression : ā ā Set c where - ā„ : ā {n} ā Expression n - ε : ā {n} ā Expression n - Char : ā {n} ā C ā Expression n - _āØ_ : ā {n} ā Expression n ā Expression n ā Expression n - _ā_ : ā {n} ā Expression n ā Expression n ā Expression n - Var : ā {n} ā Fin n ā Expression n - μ : ā {n} ā Expression (suc n) ā Expression n - -cast : ā {m n} ā .(_ : m ā” n) ā Expression m ā Expression n -cast eq ā„ = ā„ -cast eq ε = ε -cast eq (Char x) = Char x -cast eq (eā ⨠eā) = cast eq eā ⨠cast eq eā -cast eq (eā ā eā) = cast eq eā ā cast eq eā -cast eq (Var i) = Var (F.cast eq i) -cast eq (μ e) = μ (cast (cong suc eq) e) - -wkn : ā {n} ā Expression n ā Fin (suc n) ā Expression (suc n) -wkn ā„ i = ā„ -wkn ε i = ε -wkn (Char x) i = Char x + ā„ : Expression n + ε : Expression n + Char : (c : C) ā Expression n + _āØ_ : Expression n ā Expression n ā Expression n + _ā_ : Expression n ā Expression n ā Expression n + Var : (j : Fin n) ā Expression n + μ_ : Expression (suc n) ā Expression n + +------------------------------------------------------------------------ +-- Semantics + +infix 4 _ā_ + +ā¦_ā§ : Expression n ā Vec (Language _) n ā Language _ +⦠℠⧠_ = ā
+⦠ε ā§ _ = ļ½Īµļ½ {ā} +⦠Char x ā§ _ = ļ½ x ļ½ +⦠eā ⨠eā ⧠γ = ⦠eā ⧠γ ⪠⦠eā ⧠γ +⦠eā ā eā ⧠γ = ⦠eā ⧠γ āĖ” ⦠eā ⧠γ +⦠Var n ⧠γ = lookup γ n +⦠μ e ⧠γ = ā (Ī» X ā ⦠e ā§ (X ⷠγ)) + +_ā_ : {n : ā} ā Expression n ā Expression n ā Set _ +eā ā eā = ā γ ā ⦠eā ⧠γ āĖ” ⦠eā ⧠γ + +------------------------------------------------------------------------ +-- Syntax manipulation + +infix 10 _[_/_] + +wkn : Expression n ā Fin (suc n) ā Expression (suc n) +wkn ā„ i = ā„ +wkn ε i = ε +wkn (Char c) i = Char c wkn (eā ⨠eā) i = wkn eā i ⨠wkn eā i wkn (eā ā eā) i = wkn eā i ā wkn eā i -wkn (Var x) i = Var (punchIn i x) -wkn (μ e) i = μ (wkn e (suc i)) +wkn (Var j) i = Var (punchIn i j) +wkn (μ e) i = μ wkn e (suc i) -_[_/_] : ā {n} ā Expression (suc n) ā Expression n ā Fin (suc n) ā Expression n -ā„ [ eā² / i ] = ā„ -ε [ eā² / i ] = ε -Char x [ eā² / i ] = Char x +_[_/_] : Expression (suc n) ā Expression n ā Fin (suc n) ā Expression n +ā„ [ eā² / i ] = ā„ +ε [ eā² / i ] = ε +Char x [ eā² / i ] = Char x (eā ⨠eā) [ eā² / i ] = eā [ eā² / i ] ⨠eā [ eā² / i ] (eā ā eā) [ eā² / i ] = eā [ eā² / i ] ā eā [ eā² / i ] -Var j [ eā² / i ] with i F.ā j -... | yes iā”j = eā² -... | no iā¢j = Var (punchOut iā¢j) -μ e [ eā² / i ] = μ (e [ wkn eā² F.zero / suc i ]) - -rotate : ā {n} ā Expression n ā (i j : Fin n) ā .(_ : i F.⤠j) ā Expression n -rotate ā„ _ _ _ = ā„ -rotate ε _ _ _ = ε -rotate (Char x) _ _ _ = Char x -rotate (eā ⨠eā) i j iā¤j = rotate eā i j iā¤j ⨠rotate eā i j iā¤j -rotate (eā ā eā) i j iā¤j = rotate eā i j iā¤j ā rotate eā i j iā¤j -rotate {suc n} (Var k) i j _ with i F.ā k -... | yes iā”k = Var j -... | no iā¢k = Var (punchIn j (punchOut iā¢k)) -rotate (μ e) i j iā¤j = μ (rotate e (suc i) (suc j) (sā¤s iā¤j)) - -ā¦_ā§ : ā {n : ā} ā Expression n ā Vec (Language (c ā ā)) n ā Language (c ā ā) -⦠℠⧠_ = Lift (c ā ā) ā
-⦠ε ā§ _ = Lift ā ļ½Īµļ½ -⦠Char x ā§ _ = Lift ā ļ½ x ļ½ -⦠eā ⨠eā ⧠γ = ⦠eā ⧠γ ⪠⦠eā ⧠γ -⦠eā ā eā ⧠γ = ⦠eā ⧠γ āā ⦠eā ⧠γ -⦠Var n ⧠γ = lookup γ n -⦠μ e ⧠γ = ā (Ī» X ā ⦠e ā§ (X ⷠγ)) - -_ā_ : {n : ā} ā Expression n ā Expression n ā Set (lsuc (c ā ā)) -eā ā eā = ā γ ā ⦠eā ⧠γ š.ā ⦠eā ⧠γ - -rank : {n : ā} ā Expression n ā ā -rank ā„ = 0 -rank ε = 0 -rank (Char _) = 0 -rank (eā ⨠eā) = suc (rank eā ā.+ rank eā) -rank (eā ā _) = suc (rank eā) -rank (Var _) = 0 -rank (μ e) = suc (rank e) +Var j [ eā² / i ] with i ā j +... | yes iā”j = eā² +... | no iā¢j = Var (punchOut iā¢j) +(μ e) [ eā² / i ] = μ e [ wkn eā² zero / suc i ] + +------------------------------------------------------------------------ +-- Syntax properties infix 4 _<įµ£āāā_ -_<įµ£āāā_ : ā {n} ā Rel (Expression n) _ -_<įµ£āāā_ = ā._<_ on rank +rank : Expression n ā ā +rank ā„ = 0 +rank ε = 0 +rank (Char _) = 0 +rank (eā ⨠eā) = suc (rank eā + rank eā) +rank (eā ā _) = suc (rank eā) +rank (Var _) = 0 +rank (μ e) = suc (rank e) + +_<įµ£āāā_ : REL (Expression m) (Expression n) _ +e <įµ£āāā eā² = rank e < rank eā² |