HITs-Examples/Agda-HITs/Imperative/Syntax.agda

67 lines
1.3 KiB
Plaintext
Raw Normal View History

2017-05-22 16:46:58 +02:00
{-# OPTIONS --without-K --rewriting #-}
open import HoTT
module Syntax where
data Maybe (A : Set) : Set where
Just : A -> Maybe A
Nothing : Maybe A
eqN : Nat -> Nat -> Bool
eqN 0 0 = true
eqN 0 _ = false
eqN (S _) 0 = false
eqN (S n) (S m) = eqN n m
-- first coordinate represents the variable x_i, second the value
State : Set
State = List (Nat × Nat)
_[_:==_] : State -> Nat -> Nat -> State
nil [ x :== n ] = (x , n) :: nil
((y , m) :: s) [ x :== n ] =
if eqN x y
then (x , n) :: s
else ((y , m) :: (s [ x :== n ]))
equals : State -> Nat -> Nat -> Set
equals nil _ _ = Empty
equals ((x , n) :: s) y m =
if eqN x y
then
if eqN n m
then Unit
else Empty
else equals s y m
unequals : State -> Nat -> Nat -> Set
unequals nil _ _ = Unit
unequals ((x , n) :: s) y m =
if eqN x y
then
if eqN n m
then Empty
else Unit
else unequals s y m
defined : State -> Nat -> Set
defined nil y = Empty
defined ((x , n) :: s) y =
if eqN x y
then Unit
else defined s y
undefined : State -> Nat -> Set
undefined nil y = Unit
undefined ((x , n) :: s) y =
if eqN x y
then Empty
else undefined s y
data Syntax : Set where
skip : Syntax
_:=_ : Nat -> Nat -> Syntax
conc : Syntax -> Syntax -> Syntax
while_==_do_ : Nat -> Nat -> Syntax -> Syntax