cleaning up examples

This commit is contained in:
Ellen Arvidsson 2025-06-28 00:25:37 +02:00
parent 333534a8d1
commit 9db2cb800d
10 changed files with 45 additions and 80 deletions

16
example/comparable.msph Normal file
View file

@ -0,0 +1,16 @@
nominal lt
nominal eq
nominal gt
type ord = lt | eq | gt
type comparable[t] = {
member cmp : t -> ord
}
type integer = {
member cmp : integer -> ord
}
assert integer <: comparable[integer]

View file

@ -1,4 +0,0 @@
nominal C

View file

@ -1 +0,0 @@
type A = & C D

View file

@ -1,13 +0,0 @@
type X = & C (| D E)
type Y = {
member x : X
type Z = & X {
type T = C
assert C <: D
}
member r : (box forall S. (=> S Y))
member s : C[X, Y, z]
member f : -> A B
}

View file

@ -1,20 +0,0 @@
nominal M
nominal N
nominal O
nominal P
type A = {
member member1: & N M
member member2: | M N
}
type B = forall X. {
member member1 : & X A
}
member outer1 : box {
member member1: & B True
type T = & B A
member member2 : | (& T O) P
type S = & B False
}

View file

@ -1,21 +0,0 @@
nominal N
nominal M
type T[X, Y] = {
// body
}
type A = T[N, M] // binding X -> N, Y -> M
type B = T[M, N] // binding X -> M, Y -> N
// converted to
type A = ⟨ X -> N, Y -> M ⟩ {
// body
}
type B = ⟨ X -> M, Y -> N ⟩ {
// body
}

10
example/graph.msph Normal file
View file

@ -0,0 +1,10 @@
type gnode[e] = {
member edges : iterable[e]
}
type gedge[n] = {
member src : n
member dst : n
}
type graph[n, e] = (n <: gnode[e]) & (e <: gedge[n])

View file

@ -1,21 +0,0 @@
type A[X, Y] = {
type B[Z] = {
mb : X & Z
}
ma : B[Y]
}
m : A[M, N]
m : ⟨X -> M, Y -> N⟩ {
ma : B[Y]
}
m : ⟨X -> M, Y -> N⟩ {
ma : ⟨Z -> Y⟩ {
mb : X & Z
}
}

19
example/self.msph Normal file
View file

@ -0,0 +1,19 @@
type Accumulator[Self] = (Self <: Accumulator[Self]) & {
member add : Int -> Self
}
type MyAccum = {
member add : Int -> MyAccum
}
assert MyAccum <: Accumulator[MyAccum]
type Acchmmmmulator[Self] = (Self <: Acchmmmmulator[Self]) => {
member add : Int -> Self
}