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,425