# 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

• 734