namespace http://cds.omdoc.org/examples/programs❚
theory Syntax : http://cds.omdoc.org/urtheories?LF =
tp: type❙
Bool: tp❙
Nat : tp❙
Unit: tp❙
prog: tp ⟶ type❙
true : prog Bool❙
false: prog Bool❙
unit : prog Unit❙
zero : prog Nat❙
succ : prog Nat ⟶ prog Nat❘# succ 1❙
one : prog Nat❘
= succ zero❙
equal : {a} prog a ⟶ prog a ⟶ prog Bool ❘ # 2 = 3 prec 10❙
not : prog Bool ⟶ prog Bool ❘ # ¬ 1 prec 8 ❙
plus : prog Nat ⟶ prog Nat ⟶ prog Nat ❘ # 1 + 2 prec 20❙
minus : prog Nat ⟶ prog Nat ⟶ prog Nat ❘ # 1 - 2 prec 20❙
seq : {a,b} prog a ⟶ prog b ⟶ prog b ❘ # 3 ; 4 prec 5❙
ifte : {a} prog Bool ⟶ prog a ⟶ prog a ⟶ prog a❘ # if 2 then 3 else 4 prec 3❙
ifte2 : prog Bool ⟶ prog Unit ⟶ prog Unit❘
= [b,c] if b then c else unit❙
while : prog Bool ⟶ prog Unit ⟶ prog Unit❙
print : {a} prog a ⟶ prog Unit❘ # print 2❙
read : {a} prog a❙
val : {a,b} prog a ⟶ (prog a ⟶ prog b) ⟶ prog b❘ # val 3 4❙
Var : tp ⟶ type❙
var : {a,b} prog a ⟶ (Var a ⟶ prog b) ⟶ prog b❘ # var 3 4❙
varref : {a} Var a ⟶ prog a❘ # 2 ' prec 30❙
assign : {a} Var a ⟶ prog a ⟶ prog Unit❘ # 2 ← 3 prec 10❙
❚
theory Test : ?Syntax =
main = val (read Nat) [x]
var zero [y]
while (¬ x = y') (
print x;
y ← succ y'
)❙
❚