-
Notifications
You must be signed in to change notification settings - Fork 3
/
unifier-w-types.scm
60 lines (53 loc) · 1.33 KB
/
unifier-w-types.scm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
;
; unifier-w-types.scm -- Using the unifier with type constraints.
;
; This example is copied verbatim from
; `UnifyUTest::test_unify_alpha_equivalence()`
;
(use-modules (opencog) (opencog exec))
(use-modules (opencog unify))
(define LHS
(Exists
(TypedVariable
(Variable "?MEMBER")
(TypeChoice
(Type 'ConceptNode)
(Type 'SchemaNode)
(Type 'PredicateNode)))
(MemberLink
(Variable "?MEMBER")
(Concept "Org1-1"))))
(define RHS
(ExistsLink
(TypedVariable
(Variable "?OBJ")
(TypeChoice
(Type 'ConceptNode)
(Type 'SchemaNode)
(Type 'PredicateNode)))
(Member
(Variable "?OBJ")
(Variable "?COLL-6c74a409"))))
(define RHS_vardecl
(TypedVariable
(Variable "?COLL-6c74a409")
(TypeChoice
(Type 'ConceptNode)
(Type 'SchemaNode)
(Type 'PredicateNode))))
; Define an inference rule joiner.
; The only variable in the unifier is "?COLL-6c74a409" and we
; expect to have it be unified with `(Concept "Org1-1")`
(define joiner
(Unifier
LHS
(Lambda RHS_vardecl RHS)
(List (Concept "I found this:") (Variable "?COLL-6c74a409"))))
(cog-execute! joiner)
; Same as above, but with an explicitly empty variable declaration
(define join-alt
(Unifier
(Lambda (VariableList) LHS)
(Lambda RHS_vardecl RHS)
(List (Concept "I found this:") (Variable "?COLL-6c74a409"))))
(cog-execute! join-alt)