[developers] Playing with Utool for solving scope underspecification

Alexandre Rademaker arademaker at gmail.com
Tue Sep 14 21:36:23 UTC 2021


Hi all,

Should I use http://delphinqa.ling.washington.edu or https://github.com/delph-in/docs/issues? Anyway… 


https://www.coli.uni-saarland.de/projects/chorus/utool/docs/3.1.1/manual/0005.html#toc18

plugging-lkb: The output is a complex Lisp list that mimicks the output of the MRS solver in the LKB system. We don't describe this concrete syntax here.

I didn’t find any detailed information about this format in the mrsresolve.lisp file of LKB source code. 


Input: the old coder taught the new coder


The output in the plugging-lkb format is:

<result solvable='true' count='2' fragments='6'  chartsize='5'  time-chart='0'  time-extraction='0' >
  <solution string='((0 0 10) (10 0 10) (11 11 13) (13 11 13) (12 12 4) (4 12 4) (5 5 7) (7 5 7) (6 6 1) (1 6 1))' />
  <solution string='((0 0 4) (4 0 4) (5 5 7) (7 5 7) (6 6 10) (10 6 10) (12 12 1) (1 12 1) (11 11 13) (13 11 13))' />
</result>

The output in the plugging-oz format is:

<result solvable='true' count='2' fragments='6'  chartsize='5'  time-chart='0'  time-extraction='1’ >
  <solution string='[plug(h0 h10) plug(h11 h13) plug(h12 h4) plug(h5 h7) plug(h6 h1)]' />
  <solution string='[plug(h0 h4) plug(h5 h7) plug(h6 h10) plug(h12 h1) plug(h11 h13)]' />
</result>


So it looks like I can take lkb format as an associative list where the keys are the handlers. 

CL-USER> (assoc 0 '((0 0 10) (10 0 10) (11 11 13) (13 11 13) ...))
 (0 0 10)

If I don’t need/want to inspect the scopes by handlers, I can do the following to obtain the oz output:

CL-USER> (remove-duplicates (mapcar #'cdr '((0 0 10) (10 0 10) (11 11 13) (13 11 13) ...))
			    :test #'equal)
((0 10) (11 13) (12 4) (5 7) (6 1))


Am I right? Is that the right interpretation? My end goals is to produce FOL formulas from the resolved MRS like the one below, constructed from the output above:

_the_q(x10, _new_a_1(e15, x10) /\ _coder_n_1(x10), 
            _the_q(x7, _old_a_1(e9, x7) /\ _coder_n_1(x7), 
                       _teach_v_1(e3, x7, x10)))


LKB gives me the output below, which is interesting because for this case, it takes all generalized quantifiers from the resolved MRS and made a skolemization of the existential before adding new existential for the events.

'(exists ?e15
	 (exists ?e9
		 (exists ?e3
			 (and (and (_new_a_1 ?e15 const?x10)
				   (_coder_n_1 const?x10))
			      (and (and (_old_a_1 ?e9 const?x7)
					(_coder_n_1 const?x7))
				   (_teach_v_1 ?e3 const?x7 const?x10))))))


I tested with `the old coder taught every new coder` and for this it keeps the universal quantifier.

(exists ?e15
	(exists ?e9
		(exists ?e3
			(forall ?x10
				(or (not (and (_new_a_1 ?e15 ?x10) (_coder_n_1 ?x10)))
				    (and (and (_old_a_1 ?e9 const?x7) (_coder_n_1 const?x7))
					 (_teach_v_1 ?e3 const?x7 ?x10)))))))


Best,
Alexandre






More information about the developers mailing list