INTRODUCTION TO SYMBOLIC LOGIC Propositional Logic & Truth Functional Analysis.
GF as functional-logic language - Grammatical Framework · 2010-04-16 · 1 Introduction Functional...
Transcript of GF as functional-logic language - Grammatical Framework · 2010-04-16 · 1 Introduction Functional...
![Page 1: GF as functional-logic language - Grammatical Framework · 2010-04-16 · 1 Introduction Functional Programming in GF Partial De nitions Nondeterminism Logic Programming in GF Exhaustive](https://reader034.fdocuments.us/reader034/viewer/2022042810/5f9f05dd4edcc76c154d13b9/html5/thumbnails/1.jpg)
GF as functional-logic language
Krasimir Angelov
Chalmers University of Technology
April 16, 2010
![Page 2: GF as functional-logic language - Grammatical Framework · 2010-04-16 · 1 Introduction Functional Programming in GF Partial De nitions Nondeterminism Logic Programming in GF Exhaustive](https://reader034.fdocuments.us/reader034/viewer/2022042810/5f9f05dd4edcc76c154d13b9/html5/thumbnails/2.jpg)
1 IntroductionFunctional Programming in GF
Partial DefinitionsNondeterminism
Logic Programming in GFExhaustive SearchRandom Search
2 Sketch of VM Design
3 Proof of ConceptDemo: N-Queens solverCompilation via Lambda Prolog
4 Conclusion
![Page 3: GF as functional-logic language - Grammatical Framework · 2010-04-16 · 1 Introduction Functional Programming in GF Partial De nitions Nondeterminism Logic Programming in GF Exhaustive](https://reader034.fdocuments.us/reader034/viewer/2022042810/5f9f05dd4edcc76c154d13b9/html5/thumbnails/3.jpg)
1 IntroductionFunctional Programming in GF
Partial DefinitionsNondeterminism
Logic Programming in GFExhaustive SearchRandom Search
2 Sketch of VM Design
3 Proof of ConceptDemo: N-Queens solverCompilation via Lambda Prolog
4 Conclusion
![Page 4: GF as functional-logic language - Grammatical Framework · 2010-04-16 · 1 Introduction Functional Programming in GF Partial De nitions Nondeterminism Logic Programming in GF Exhaustive](https://reader034.fdocuments.us/reader034/viewer/2022042810/5f9f05dd4edcc76c154d13b9/html5/thumbnails/4.jpg)
The Dichotomy in GF
Abstract SyntaxDefines the abstract ontological structure of the domainTuring-complete functional languageDependent types
Concrete SyntaxDefines a rendering of the abstract syntax into some languageRestricted recursion-free functional languageSimpe polymorphic types, but - overloading, records, subtyping
Note: In this talk we will focus on the abstract syntax
![Page 5: GF as functional-logic language - Grammatical Framework · 2010-04-16 · 1 Introduction Functional Programming in GF Partial De nitions Nondeterminism Logic Programming in GF Exhaustive](https://reader034.fdocuments.us/reader034/viewer/2022042810/5f9f05dd4edcc76c154d13b9/html5/thumbnails/5.jpg)
1 IntroductionFunctional Programming in GF
Partial DefinitionsNondeterminism
Logic Programming in GFExhaustive SearchRandom Search
2 Sketch of VM Design
3 Proof of ConceptDemo: N-Queens solverCompilation via Lambda Prolog
4 Conclusion
![Page 6: GF as functional-logic language - Grammatical Framework · 2010-04-16 · 1 Introduction Functional Programming in GF Partial De nitions Nondeterminism Logic Programming in GF Exhaustive](https://reader034.fdocuments.us/reader034/viewer/2022042810/5f9f05dd4edcc76c154d13b9/html5/thumbnails/6.jpg)
Abstract Syntax
Turing-complete functional language:
abstract Nat = {
cat Nat;
data zero : Nat;
succ : Nat → Nat;
fun plus : Nat → Nat → Nat;
def plus zero n = n;
plus (succ m) n = succ (plus m n);
}
![Page 7: GF as functional-logic language - Grammatical Framework · 2010-04-16 · 1 Introduction Functional Programming in GF Partial De nitions Nondeterminism Logic Programming in GF Exhaustive](https://reader034.fdocuments.us/reader034/viewer/2022042810/5f9f05dd4edcc76c154d13b9/html5/thumbnails/7.jpg)
Concrete Syntax
As an example a natural number in ASCII is asequence of underscores.
concrete NatAscii of Nat = {
lincat Nat = Str ;
lin zero = ””;
succ x = ” ” ++ x ;
}
Note: We will use this in the N-Queens solver
![Page 8: GF as functional-logic language - Grammatical Framework · 2010-04-16 · 1 Introduction Functional Programming in GF Partial De nitions Nondeterminism Logic Programming in GF Exhaustive](https://reader034.fdocuments.us/reader034/viewer/2022042810/5f9f05dd4edcc76c154d13b9/html5/thumbnails/8.jpg)
Type System
The abstract syntax is a first-order type theory:
dependent types - (x : A)→ B x
implicit arguments - ({x , y} : A)→ B New!
inaccessible patterns - (∼ x) New!
Note: The last two were introduced only in the last months. Thisfeatures are borrowed from Agda but the syntax is changed toavoid ambiguities.
![Page 9: GF as functional-logic language - Grammatical Framework · 2010-04-16 · 1 Introduction Functional Programming in GF Partial De nitions Nondeterminism Logic Programming in GF Exhaustive](https://reader034.fdocuments.us/reader034/viewer/2022042810/5f9f05dd4edcc76c154d13b9/html5/thumbnails/9.jpg)
Example: Dependent Types & Implicit Arguments
cat Category ;
Obj Category ;
Arrow ({c} : Category) (Obj c) (Obj c);
fun dom : ({c} : Category)→ ({x , y} : Obj c)→ Arrow x y → Obj c ;
def dom {x} {y} = x ;
fun codom : ({c} : Category)→ ({x , y} : Obj c)→ Arrow x y → Obj c ;
def codom {x} {y} = y ;
![Page 10: GF as functional-logic language - Grammatical Framework · 2010-04-16 · 1 Introduction Functional Programming in GF Partial De nitions Nondeterminism Logic Programming in GF Exhaustive](https://reader034.fdocuments.us/reader034/viewer/2022042810/5f9f05dd4edcc76c154d13b9/html5/thumbnails/10.jpg)
Example: Dependent Types & Inaccessible Patterns
cat EqAr ({c} : Category) ({x , y} : Obj c) (f , g : Arrow x y);
data eqRefl : ({c} : Category)
→ ({x , y} : Obj c)
→ (f : Arrow x y)
→ EqAr f f ;
fun eqSym : ({c} : Category)
→ ({x , y} : Obj c)
→ ({f , g} : Arrow x y)
→ EqAr f g
→ EqAr g f ;
def eqSym {∼ c} (eqRefl {c} f ) = eqRefl {c} f ;
![Page 11: GF as functional-logic language - Grammatical Framework · 2010-04-16 · 1 Introduction Functional Programming in GF Partial De nitions Nondeterminism Logic Programming in GF Exhaustive](https://reader034.fdocuments.us/reader034/viewer/2022042810/5f9f05dd4edcc76c154d13b9/html5/thumbnails/11.jpg)
Why First-Order Type Theory?
Polymorphic types:
fun id : (A : Type)→ A→ A
are not allowed, because:
what is the lincat of A?
parsing with polymorphic types would not be tractable.
Note: this also allows us to use GF as efficient logic-basedprogramming language
![Page 12: GF as functional-logic language - Grammatical Framework · 2010-04-16 · 1 Introduction Functional Programming in GF Partial De nitions Nondeterminism Logic Programming in GF Exhaustive](https://reader034.fdocuments.us/reader034/viewer/2022042810/5f9f05dd4edcc76c154d13b9/html5/thumbnails/12.jpg)
Why First-Order Type Theory?
So far this looks like cut down version of Agda withdifferent syntax, but:
we allow partial definitions
we want to have nondeterministic computations in the future
![Page 13: GF as functional-logic language - Grammatical Framework · 2010-04-16 · 1 Introduction Functional Programming in GF Partial De nitions Nondeterminism Logic Programming in GF Exhaustive](https://reader034.fdocuments.us/reader034/viewer/2022042810/5f9f05dd4edcc76c154d13b9/html5/thumbnails/13.jpg)
Partial Definitions
We could have definition like this:
fun pred : Nat → Nat;
def pred (succ x) = x ;
then what is the value of pred zero?
Answer:
pred zero pred zero
This lets us to render sentences like this:
The predecessor of zero is not defined
![Page 14: GF as functional-logic language - Grammatical Framework · 2010-04-16 · 1 Introduction Functional Programming in GF Partial De nitions Nondeterminism Logic Programming in GF Exhaustive](https://reader034.fdocuments.us/reader034/viewer/2022042810/5f9f05dd4edcc76c154d13b9/html5/thumbnails/14.jpg)
Nondeterminism
Currently only in the concrete syntax:
lin don’t = ”don’t” | ”do not”;
, which helps to capture redundancies in NL.
Would be interesting in the abstract syntax:
fun call V = V (call by phone P | has name P);
, could handle semantic ambiguities.
Note: still not clear how this should interact with the dependenttypes. Perhaps union types?
![Page 15: GF as functional-logic language - Grammatical Framework · 2010-04-16 · 1 Introduction Functional Programming in GF Partial De nitions Nondeterminism Logic Programming in GF Exhaustive](https://reader034.fdocuments.us/reader034/viewer/2022042810/5f9f05dd4edcc76c154d13b9/html5/thumbnails/15.jpg)
1 IntroductionFunctional Programming in GF
Partial DefinitionsNondeterminism
Logic Programming in GFExhaustive SearchRandom Search
2 Sketch of VM Design
3 Proof of ConceptDemo: N-Queens solverCompilation via Lambda Prolog
4 Conclusion
![Page 16: GF as functional-logic language - Grammatical Framework · 2010-04-16 · 1 Introduction Functional Programming in GF Partial De nitions Nondeterminism Logic Programming in GF Exhaustive](https://reader034.fdocuments.us/reader034/viewer/2022042810/5f9f05dd4edcc76c154d13b9/html5/thumbnails/16.jpg)
Logic Programming in GF
Two of the fundamental functionalities in GF are:Exhaustive search for terms of given type
Random search for term of given type
Note: since we have dependent types the set of all type signaturesis a first-order logic program
![Page 17: GF as functional-logic language - Grammatical Framework · 2010-04-16 · 1 Introduction Functional Programming in GF Partial De nitions Nondeterminism Logic Programming in GF Exhaustive](https://reader034.fdocuments.us/reader034/viewer/2022042810/5f9f05dd4edcc76c154d13b9/html5/thumbnails/17.jpg)
Exhaustive Search
The generate tree (gt) command generates all treesof given category:
$ gt -cat=Natzerosucc zerosucc (succ zero). . .
Note: the term is the stack trace of a logic-based program
![Page 18: GF as functional-logic language - Grammatical Framework · 2010-04-16 · 1 Introduction Functional Programming in GF Partial De nitions Nondeterminism Logic Programming in GF Exhaustive](https://reader034.fdocuments.us/reader034/viewer/2022042810/5f9f05dd4edcc76c154d13b9/html5/thumbnails/18.jpg)
Random Search
The generate random (gt) command generatesrandom tree of given category:
$ gr -cat=Nat -number=3succ (succ zero)zerosucc zero. . .
Note: running a randomized algorithm
![Page 19: GF as functional-logic language - Grammatical Framework · 2010-04-16 · 1 Introduction Functional Programming in GF Partial De nitions Nondeterminism Logic Programming in GF Exhaustive](https://reader034.fdocuments.us/reader034/viewer/2022042810/5f9f05dd4edcc76c154d13b9/html5/thumbnails/19.jpg)
Reconstruction of Parse Trees
Naive approach for semantic restrictions:
cat Kind ;
Switchable Kind ;
data light, fan : Kind ;
switchOn, switchOff : (k : Kind)→ Switchable k → Action k ;
lin switchOn k = ”switch on” ++k ;
Wouldn’t work (meta variables):concrete : switch on the bankabstract : switchOn bank ?
Solution - Try to prove:
Switchablep bank
![Page 20: GF as functional-logic language - Grammatical Framework · 2010-04-16 · 1 Introduction Functional Programming in GF Partial De nitions Nondeterminism Logic Programming in GF Exhaustive](https://reader034.fdocuments.us/reader034/viewer/2022042810/5f9f05dd4edcc76c154d13b9/html5/thumbnails/20.jpg)
1 IntroductionFunctional Programming in GF
Partial DefinitionsNondeterminism
Logic Programming in GFExhaustive SearchRandom Search
2 Sketch of VM Design
3 Proof of ConceptDemo: N-Queens solverCompilation via Lambda Prolog
4 Conclusion
![Page 21: GF as functional-logic language - Grammatical Framework · 2010-04-16 · 1 Introduction Functional Programming in GF Partial De nitions Nondeterminism Logic Programming in GF Exhaustive](https://reader034.fdocuments.us/reader034/viewer/2022042810/5f9f05dd4edcc76c154d13b9/html5/thumbnails/21.jpg)
Dissection of the Dependent Types
Every nonfunction type could be dissected into asimple type and a predicate:
x : T iff Tp(x) where Tp : Tt → o
The implementation of the predicate requires logic programmingand something more than Prolog i.e. Lambda Prolog
![Page 22: GF as functional-logic language - Grammatical Framework · 2010-04-16 · 1 Introduction Functional Programming in GF Partial De nitions Nondeterminism Logic Programming in GF Exhaustive](https://reader034.fdocuments.us/reader034/viewer/2022042810/5f9f05dd4edcc76c154d13b9/html5/thumbnails/22.jpg)
Introduction to Lambda Prolog
Lambda Prolog is an extension of Prolog where:
the Horn clauses are generalized to Hereditary Harropformulae
the programs are statically type checked
the object terms could have lambda abstractions
quantification over function symbols is allowed
![Page 23: GF as functional-logic language - Grammatical Framework · 2010-04-16 · 1 Introduction Functional Programming in GF Partial De nitions Nondeterminism Logic Programming in GF Exhaustive](https://reader034.fdocuments.us/reader034/viewer/2022042810/5f9f05dd4edcc76c154d13b9/html5/thumbnails/23.jpg)
Hereditary Harrop formulae
Just enough extensions to realize what we need in GF. We will seeexamples later.
A-formulae (consequent)
any atom
A :−G
A, A
pi x\A
G-formulae (antecedent, goal)
any atom
G :−A
G , G
G ; G
pi x\Gsigma x\G
![Page 24: GF as functional-logic language - Grammatical Framework · 2010-04-16 · 1 Introduction Functional Programming in GF Partial De nitions Nondeterminism Logic Programming in GF Exhaustive](https://reader034.fdocuments.us/reader034/viewer/2022042810/5f9f05dd4edcc76c154d13b9/html5/thumbnails/24.jpg)
Translation to Lambda Prolog
e : C e1 . . . en ` Cp e e1 . . . enC - category
∀j .∃ij .free(xij ) xij : Tij ` Fj f x1 . . . xn : T ` F
f : (x1 : T1)→ . . . (xn : Tn)→ T ` pi x1 . . . xn\ F :−F1, . . . Fm
free(x) - x is not used anywhere in the type
![Page 25: GF as functional-logic language - Grammatical Framework · 2010-04-16 · 1 Introduction Functional Programming in GF Partial De nitions Nondeterminism Logic Programming in GF Exhaustive](https://reader034.fdocuments.us/reader034/viewer/2022042810/5f9f05dd4edcc76c154d13b9/html5/thumbnails/25.jpg)
Example - simple
GF
data zero : Nat;
succ : Nat → Nat;
Lambda Prolog
Natp zero.
pi X\ Natp (succ X ) :− Natp X .
![Page 26: GF as functional-logic language - Grammatical Framework · 2010-04-16 · 1 Introduction Functional Programming in GF Partial De nitions Nondeterminism Logic Programming in GF Exhaustive](https://reader034.fdocuments.us/reader034/viewer/2022042810/5f9f05dd4edcc76c154d13b9/html5/thumbnails/26.jpg)
Example - high-order functions
GF
data f : (Nat → Nat)→ Nat;
Lambda Prolog
pi G\ Natp (f G ) :− (pi X\ Natp (G X ) :−Natp X ).
Note: quantification over function i.e. G
![Page 27: GF as functional-logic language - Grammatical Framework · 2010-04-16 · 1 Introduction Functional Programming in GF Partial De nitions Nondeterminism Logic Programming in GF Exhaustive](https://reader034.fdocuments.us/reader034/viewer/2022042810/5f9f05dd4edcc76c154d13b9/html5/thumbnails/27.jpg)
Example - dependent types
GF
cat Vec Nat;
data nil : Vec zero;
cons : ({n} : Nat)→ Nat → Vec n→ Vec (succ n);
Lambda Prolog
Vecp nil zero.
pi X , L, N\ Vecp (cons N X L) (succ N) :−Natp X , Vecp L N.
Note: no Natp N because N is output variable in Vecp L N
![Page 28: GF as functional-logic language - Grammatical Framework · 2010-04-16 · 1 Introduction Functional Programming in GF Partial De nitions Nondeterminism Logic Programming in GF Exhaustive](https://reader034.fdocuments.us/reader034/viewer/2022042810/5f9f05dd4edcc76c154d13b9/html5/thumbnails/28.jpg)
Translation of Functions to Predicates - by example
GF
fun plus : Nat → Nat → Nat;
def plus zero n = n;
plus (succ m) n = succ (plus m n);
Lambda Prolog
exportdef plus Natt → Natt → Natt → o.
plus zero X X .
plus (succ X ) Y (succ Z ) :− plus X Y Z .
![Page 29: GF as functional-logic language - Grammatical Framework · 2010-04-16 · 1 Introduction Functional Programming in GF Partial De nitions Nondeterminism Logic Programming in GF Exhaustive](https://reader034.fdocuments.us/reader034/viewer/2022042810/5f9f05dd4edcc76c154d13b9/html5/thumbnails/29.jpg)
Problem: functions should be computed lazily
The encoding of functions as predicates couldmodel only strict functions, but:
SICStus Prolog has extensions that could emulate lazyness
The proof search is lazy by default in Curry
Two places to look for ...
![Page 30: GF as functional-logic language - Grammatical Framework · 2010-04-16 · 1 Introduction Functional Programming in GF Partial De nitions Nondeterminism Logic Programming in GF Exhaustive](https://reader034.fdocuments.us/reader034/viewer/2022042810/5f9f05dd4edcc76c154d13b9/html5/thumbnails/30.jpg)
Uncomputing
Let’s say that we have:
fun append : (m, n : Nat)→ Vec m→ Vec n→ Vec (plus m n);
Now try to prove:
Vecp (succ (succ zero))
Obviously for append you have to compute plus backwards i.e.find m, n : Nat such that m + n = 2
Note: we will use this to solve NQueens
![Page 31: GF as functional-logic language - Grammatical Framework · 2010-04-16 · 1 Introduction Functional Programming in GF Partial De nitions Nondeterminism Logic Programming in GF Exhaustive](https://reader034.fdocuments.us/reader034/viewer/2022042810/5f9f05dd4edcc76c154d13b9/html5/thumbnails/31.jpg)
Type Checking as Prolog Program
We have two type checkers one in the compiler andone in the interpreter.
The runtime type checker is actually running a Prolog program.Example:
?− Vecp nil zero. ?− Vecp nil (cons zero).yes no
![Page 32: GF as functional-logic language - Grammatical Framework · 2010-04-16 · 1 Introduction Functional Programming in GF Partial De nitions Nondeterminism Logic Programming in GF Exhaustive](https://reader034.fdocuments.us/reader034/viewer/2022042810/5f9f05dd4edcc76c154d13b9/html5/thumbnails/32.jpg)
Type Checking as Prolog Program
This doesn’t scale with meta-variables
Prolog uses narrowing:
?− Vecp (cons X nil) (succ zero).X = zeroyesX = succ zeroyes. . .
The typecheckers in Agda and GF need residuation. We mustborrow the residuation strategy from Curry:
?− Vecp (cons X nil) (succ zero).yes
![Page 33: GF as functional-logic language - Grammatical Framework · 2010-04-16 · 1 Introduction Functional Programming in GF Partial De nitions Nondeterminism Logic Programming in GF Exhaustive](https://reader034.fdocuments.us/reader034/viewer/2022042810/5f9f05dd4edcc76c154d13b9/html5/thumbnails/33.jpg)
1 IntroductionFunctional Programming in GF
Partial DefinitionsNondeterminism
Logic Programming in GFExhaustive SearchRandom Search
2 Sketch of VM Design
3 Proof of ConceptDemo: N-Queens solverCompilation via Lambda Prolog
4 Conclusion
![Page 34: GF as functional-logic language - Grammatical Framework · 2010-04-16 · 1 Introduction Functional Programming in GF Partial De nitions Nondeterminism Logic Programming in GF Exhaustive](https://reader034.fdocuments.us/reader034/viewer/2022042810/5f9f05dd4edcc76c154d13b9/html5/thumbnails/34.jpg)
Proof of Concept
I have implemented source-to-source transformationfrom GF to Lambda Prolog
The final goal is to integrate the virtual machine of Lambda Prologdirectly in GF
![Page 35: GF as functional-logic language - Grammatical Framework · 2010-04-16 · 1 Introduction Functional Programming in GF Partial De nitions Nondeterminism Logic Programming in GF Exhaustive](https://reader034.fdocuments.us/reader034/viewer/2022042810/5f9f05dd4edcc76c154d13b9/html5/thumbnails/35.jpg)
Demo: N-Queens solver
The n-queens puzzle is theproblem of placing n chessqueens on a n × n chessboardsuch that none of them are ableto capture any other using thestandard chess queen’s moves.
![Page 36: GF as functional-logic language - Grammatical Framework · 2010-04-16 · 1 Introduction Functional Programming in GF Partial De nitions Nondeterminism Logic Programming in GF Exhaustive](https://reader034.fdocuments.us/reader034/viewer/2022042810/5f9f05dd4edcc76c154d13b9/html5/thumbnails/36.jpg)
The Chessboard Reduced to Vector
cat Matrix Nat;
Vec (s, l : Nat) [Nat];
data matrix : (s : Nat)→ Vec s s BaseNat → Matrix s;
s - the size of the chessboard
l - the length of the vector
[Nat] - the list of already occupied positions
![Page 37: GF as functional-logic language - Grammatical Framework · 2010-04-16 · 1 Introduction Functional Programming in GF Partial De nitions Nondeterminism Logic Programming in GF Exhaustive](https://reader034.fdocuments.us/reader034/viewer/2022042810/5f9f05dd4edcc76c154d13b9/html5/thumbnails/37.jpg)
Need Type-Level Inequality of Nat
cat NE (i , j : Nat);
data zNE : (i , j : Nat)→ NE i j → NE (succ i) (succ j);
lNE : (j : Nat)→ NE zero (succ j);
rNE : (j : Nat)→ NE (succ j) zero;
zNE - induction step
lNE , rNE - base cases
![Page 38: GF as functional-logic language - Grammatical Framework · 2010-04-16 · 1 Introduction Functional Programming in GF Partial De nitions Nondeterminism Logic Programming in GF Exhaustive](https://reader034.fdocuments.us/reader034/viewer/2022042810/5f9f05dd4edcc76c154d13b9/html5/thumbnails/38.jpg)
Satisfiability Condition
cat Sat Nat Nat [Nat];
data nilS : (j , d : Nat)→ Sat j d BaseNat;
consS : (i , j , d : Nat)→ (c : [Nat])
→ NE i j
→ NE i (plus d j)
→ NE (plus d i) j
→ Sat j (succ d) c
→ Sat j d (ConsNat i c);
j - the position that we check
i - the occupied position d lines above the current line
![Page 39: GF as functional-logic language - Grammatical Framework · 2010-04-16 · 1 Introduction Functional Programming in GF Partial De nitions Nondeterminism Logic Programming in GF Exhaustive](https://reader034.fdocuments.us/reader034/viewer/2022042810/5f9f05dd4edcc76c154d13b9/html5/thumbnails/39.jpg)
The Vector
data nilV : (s : Nat)→ (c : [Nat])→ Vec s zero c;
consV : (l , j , k : Nat)→let s = succ (plus j k)
in (c : [Nat])→ Sat j (succ zero) c →Vec s l (ConsNat j c)→ Vec s (succ l) c ;
j , k : Nat, such that j + 1 + k = s
![Page 40: GF as functional-logic language - Grammatical Framework · 2010-04-16 · 1 Introduction Functional Programming in GF Partial De nitions Nondeterminism Logic Programming in GF Exhaustive](https://reader034.fdocuments.us/reader034/viewer/2022042810/5f9f05dd4edcc76c154d13b9/html5/thumbnails/40.jpg)
Concrete Syntax for Vector and Matrix
lincat Matrix , Vec = Str ;
[Nat], Sat = {};
lin nilV = ””;
consV j k v = j ++”X” ++k ++”\n” ++v ;
matrix v = v ;
![Page 41: GF as functional-logic language - Grammatical Framework · 2010-04-16 · 1 Introduction Functional Programming in GF Partial De nitions Nondeterminism Logic Programming in GF Exhaustive](https://reader034.fdocuments.us/reader034/viewer/2022042810/5f9f05dd4edcc76c154d13b9/html5/thumbnails/41.jpg)
Compilation via Lambda Prolog
Generate Code:$ gf -make -output-format=lambda prolog examples/nqueens/NQueensAscii.gfWriting NQueens.pgf...Writing NQueens.mod...Writing NQueens.sig...
Compile:$ tjcc NQueens.mod$ tjlink NQueens.lpo$ tjsim NQueens.lp
Run:
?− p Matrix (succ (succ (succ (succ zero))))
Linearize the result in GF:
l -unchars ”the tree generated from Lambda Prolog”
![Page 42: GF as functional-logic language - Grammatical Framework · 2010-04-16 · 1 Introduction Functional Programming in GF Partial De nitions Nondeterminism Logic Programming in GF Exhaustive](https://reader034.fdocuments.us/reader034/viewer/2022042810/5f9f05dd4edcc76c154d13b9/html5/thumbnails/42.jpg)
1 IntroductionFunctional Programming in GF
Partial DefinitionsNondeterminism
Logic Programming in GFExhaustive SearchRandom Search
2 Sketch of VM Design
3 Proof of ConceptDemo: N-Queens solverCompilation via Lambda Prolog
4 Conclusion
![Page 43: GF as functional-logic language - Grammatical Framework · 2010-04-16 · 1 Introduction Functional Programming in GF Partial De nitions Nondeterminism Logic Programming in GF Exhaustive](https://reader034.fdocuments.us/reader034/viewer/2022042810/5f9f05dd4edcc76c154d13b9/html5/thumbnails/43.jpg)
Conclusion
The virtual machine of Lambda Prolog offers almosteverything that we need:
efficient backtracking
high-order pattern matching unification
hereditary Harrop formulae
but we need also:
laziness
residuation mode