IDP2ASP
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:
- Variables (x)
- Application (f x)
- Lambda (\x -> x)
- Let (let x := 2 in x +8)
Values:
- Injected values (8)
- Builtins (or)
- Herbrand Constructors (S(S(Nil)))
- Set Expression ( {x || x <- set} )
Deconstructing values:
- Case (case x of (a,b) -> a + b)
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
- Primitive Type (Set, Int)
- Type Variable (a)
- Type Application (Set String)
- Implicit Universal Quantification (forall a b: (a,b) -> a)
\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
IDP2ASP
By Ingmar Dasseville
IDP2ASP
- 1,240