diff cbc/subtype.agda @ 54:fa95e3070138

Define SingleLinkedStack using subtype
author atton <atton@cr.ie.u-ryukyu.ac.jp>
date Wed, 11 Jan 2017 10:56:13 +0000
parents 6af88ee5c4ca
children 81c6779583b6
line wrap: on
line diff
--- a/cbc/subtype.agda	Tue Jan 10 09:07:07 2017 +0000
+++ b/cbc/subtype.agda	Wed Jan 11 10:56:13 2017 +0000
@@ -1,16 +1,16 @@
 open import Level
 open import Relation.Binary.PropositionalEquality
 
-module subtype (Context : Set) where
+module subtype {l : Level} (Context : Set l) where
 
 
-record DataSegment (A : Set) : Set where
+record DataSegment {ll : Level} (A : Set ll) : Set (l ⊔ ll) where
   field
     get : Context -> A
     set : Context -> A -> Context
 open DataSegment
 
-data CodeSegment (A B : Set) : Set where
+data CodeSegment {l1 l2 : Level} (A : Set l1) (B : Set l2) : Set (l ⊔ l1 ⊔ l2) where
   cs : {{_ : DataSegment A}} {{_ : DataSegment B}} -> (A -> B) -> CodeSegment A B
 
 
@@ -18,11 +18,14 @@
 exec {l} {{i}} {{o}}  (cs b) c = set o c (b (get i c))
 
 
-comp : {con : Context} -> {A B C D : Set} {{_ : DataSegment A}} {{_ : DataSegment B}} {{_ : DataSegment C}} {{_ : DataSegment D}}
+comp : {con : Context} -> {l1 l2 l3 l4 : Level}
+       {A : Set l1} {B : Set l2} {C : Set l3} {D : Set l4}
+       {{_ : DataSegment A}} {{_ : DataSegment B}} {{_ : DataSegment C}} {{_ : DataSegment D}}
        -> (C -> D) -> (A -> B) -> A -> D
 comp {con} {{i}} {{io}} {{oi}} {{o}} g f x = g (get oi (set io con (f x)))
 
-csComp : {con : Context} {A B C D : Set}
+csComp : {con : Context} -> {l1 l2 l3 l4 : Level}
+         {A : Set l1} {B : Set l2} {C : Set l3} {D : Set l4}
          {{_ : DataSegment A}} {{_ : DataSegment B}} {{_ : DataSegment C}} {{_ : DataSegment D}}
        -> CodeSegment C D -> CodeSegment A B -> CodeSegment A D
 csComp {con} {A} {B} {C} {D} {{da}} {{db}} {{dc}} {{dd}} (cs g) (cs f)
@@ -30,7 +33,7 @@
 
 
 
-comp-associative : {A B C D E F : Set} {con : Context}
+comp-associative : {A B C D E F : Set l} {con : Context}
                    {{da : DataSegment A}} {{db : DataSegment B}} {{dc : DataSegment C}}
                    {{dd : DataSegment D}} {{de : DataSegment E}} {{df : DataSegment F}}
                    -> (a : CodeSegment A B) (b : CodeSegment C D) (c : CodeSegment E F)