oplss2024/ahmed/day1.agda

34 lines
1.1 KiB
Agda
Raw Normal View History

2024-06-04 14:31:23 +00:00
module ahmed.day1 where
2024-06-04 22:56:00 +00:00
open import Agda.Primitive
open import Data.Nat
open import Data.Fin
2024-06-04 14:31:23 +00:00
open import Data.Product
data Type : Set where
Bool : Type
_-→_ : Type Type Type
2024-06-04 22:56:00 +00:00
data Term (n : ) : Set where
Var : (m : Fin n) Term n
True : Term n
False : Term n
If_Then_Else_ : Term n Term n Term n Term n
λ[_::_]_ : Term n Type Term n Term n
_∙_ : Term n Term n Term n
2024-06-04 14:31:23 +00:00
2024-06-04 22:56:00 +00:00
data isValue (n : ) : Term n Set where
TrueValue : isValue n True
FalseValue : isValue n False
LambdaValue : (x : Term n) (τ : Type) (e : Term n) isValue n (λ[ x :: τ ] e)
2024-06-04 14:31:23 +00:00
2024-06-04 22:56:00 +00:00
Value = (n : ) Σ (Term n) (isValue n)
2024-06-04 14:31:23 +00:00
2024-06-04 22:56:00 +00:00
data evaluationContext : (n : ) Set where
dot : evaluationContext 0
EIf_Then_Else_ : {n : } evaluationContext n Term n Term n evaluationContext n
EAppLeft : {n : } evaluationContext n Term n evaluationContext n
EAppRight : {n : } Value evaluationContext n evaluationContext n
2024-06-04 17:52:15 +00:00
2024-06-04 22:56:00 +00:00
data isValidValueForType (n : ) (t : Type) : (e : Term n) Set where
TrueV : isValidValueForType n Bool True