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

67 lines
1.3 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{-# 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