Looking at the effect of a semantic free variable that can make “some” mean (lexically) some-not-all.
(define (power dist a) (list (first dist)
(map (lambda (x) (pow x a)) (second dist))))
(define (meaning utterance marbles total-marbles fv)
(case utterance
(('null) true)
(('none) (= marbles 0))
(('all) (= marbles total-marbles))
(('some) (and (> marbles 0) (if fv (< marbles total-marbles) true)))))
(define (QUD-cell QUD marbles total-marbles)
(case QUD
(('is-all) (= marbles total-marbles))
(('is-not-none) (> marbles 0))
(('how-many) marbles)))
(define (quantifier quantifier-alternatives) (apply multinomial alt-dist))
(define (marble-state total-marbles allprior)
(case total-marbles
(('3) (multinomial '(0 1 2 3) (list 1 1 1 allprior)))
(('4) (multinomial '(0 1 2 3 4) (list 1 1 1 1 allprior)))
(('5) (multinomial '(0 1 2 3 4 5) (list 1 1 1 1 1 allprior)))))
(define literal-listener
(mem (lambda (utterance QUD total-marbles alt-dist fv allprior)
(enumeration-query
(define marbles (marble-state total-marbles allprior))
(QUD-cell QUD marbles total-marbles)
(meaning utterance marbles total-marbles fv)))))
(define pragmatic-speaker
(mem (lambda (marbles QUD total-marbles quantifier-alternatives fv allprior)
(enumeration-query
(define utterance (quantifier alt-dist))
utterance
(and
(equal? (QUD-cell QUD marbles total-marbles)
(apply multinomial
(power (literal-listener utterance QUD total-marbles alt-dist fv allprior)
speaker-opt)))
(meaning utterance marbles total-marbles fv))))))
(define (pragmatic-listener utterance QUD total-marbles alt-dist allprior)
(enumeration-query
(define marbles (marble-state total-marbles allprior))
(define fv (flip))
marbles
(equal? utterance
(apply multinomial
(pragmatic-speaker marbles QUD total-marbles alt-dist fv allprior)))))
(define speaker-opt 3)
(define alt-dist (list '(null none some all)
'(20 1 1 1 )))
(define (pl pr) (pair pr
(fourth (second
(pragmatic-listener 'some 'how-many 4 alt-dist pr)))))
(lineplot (map pl '(1 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2 2.1 2.2)))