Ingmar Dasseville
20/03/2018
Full Language
Desugaring
Core
ASP
Type Check
Translation
Optimiser
- Push Negations
- Topological let-reordering
- Inliner
-Beta Reduction
Core
Basic Lambda Calculus:
Values:
Deconstructing values:
Full Language
Desugaring
Core
! dom (\x -> p x | q x)
Desugaring
Ap(
Ap(Builtin(Forall),
Var(dom)),
Lambda(x, Ap(
Ap(Builtin(Or), Ap(Var(p),Var(x)),
Ap(Var(q),Var(x))
)
)
Core
Type Check
Vanilla Hindley-Milner (unfinished for constructors)
\x -> x+1
Int -> Int
\x -> x
a -> a
\x -> 1 x
Type Error
Core
Optimiser
Inline Let
let f x := 1 in f c + 5
(\x -> 1) c + 5
Beta Reduction
1 + 5
Math simplification
(not implemented yet)
6
Core
ASP
Translation
ASPTerm (X)
+ Safety: ({p(X), q(Y)})
Expression
Extra properties in helper predicates:
bool(t,()) | boolean t is true |
member(t,2) | 2 is a member of set t |
lamDom(t,5) | 5 is in the relevant domain of function t |
lamInter(t,4,6) | the function t maps 4 to 6 |
result(t) | t is the top symbol of the theory |
member((s0,()),1..5).
{member((s1,()),X0):member((s0,()),X0)}==1.
bool((b0,()),()):-(X1+1)=3,member((s1,()),X1).
result((b0,())).
:-not bool(X,()),result(X).
c :: element of {1..5}.
c + 1 = 3.
Translation
Desugaring
{1..5} | (s0,()) | {} |
c | X0 | {member((s1,()),X0} |
c+1 | X0+1 | {member((s1,()),X0} |
c+1=3 | (b0,()) | {} |
Full Language
Desugaring
Core
ASP
Type Check
Translation
Optimiser
- Push Negations
- Topological let-reordering
- Inliner
-Beta Reduction