summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMasaya Tojo <masaya@tojo.tokyo>2020-11-07 16:00:36 +0900
committerMasaya Tojo <masaya@tojo.tokyo>2020-11-07 16:00:36 +0900
commit5e86af3f7845f2c0b10b1f7b788b8c38255d42fd (patch)
tree1aefa75086a0a3b4879f2256380f11d23acb29fa
parentd9e4ce77062f21659f82513bc4b4d281e6c6fb4b (diff)
wip3
-rw-r--r--rabbit-prover.scm94
1 files changed, 54 insertions, 40 deletions
diff --git a/rabbit-prover.scm b/rabbit-prover.scm
index b448eaf..8c594a8 100644
--- a/rabbit-prover.scm
+++ b/rabbit-prover.scm
@@ -131,45 +131,52 @@
#t))
(call/cc
(lambda (k)
- (substitute (let mat ((lhs `(and ,@(rule-preconds rl) ,(rule-lhs rl)))
- (expr `(and ,@preconds ,expr))
- (env '()))
- (format #t "lhs: ~s, expr: ~s, env: ~s~%" lhs expr env)
- (cond ((expr-quoted? lhs)
- (if (expr-quoted? expr)
- (and (equal? lhs expr)
- env)
- (k #f)))
- ((pair? lhs)
- (if (and (pair? expr)
- (symbol? (car lhs))
- (eqv? (car lhs) (car expr)))
- (let loop ((lhss (cdr lhs))
- (exprs (cdr expr))
- (env env))
- (cond ((and (pair? lhss)
- (pair? exprs))
- (loop (cdr lhss)
- (cdr exprs)
- (mat (car lhss)
- (car exprs)
- env)))
- ((and (null? lhss)
- (null? exprs))
- env)
- (else (k #f))))
- (k #f)))
- ((var? lhs)
- (cond
- ((assoc lhs env)
- => (lambda (p)
- (if (equal? (cdr p) expr)
- env
- (k #f))))
- (else
- (cons (cons lhs expr)
- env))))
- (else (k #f))))
+ (define (mat lhs expr env)
+ (format #t "lhs: ~s, expr: ~s, env: ~s~%" lhs expr env)
+ (cond ((expr-quoted? lhs)
+ (if (expr-quoted? expr)
+ (and (equal? lhs expr)
+ env)
+ (k #f)))
+ ((pair? lhs)
+ (if (and (pair? expr)
+ (symbol? (car lhs))
+ (eqv? (car lhs) (car expr)))
+ (let loop ((lhss (cdr lhs))
+ (exprs (cdr expr))
+ (env env))
+ (cond ((and (pair? lhss)
+ (pair? exprs))
+ (loop (cdr lhss)
+ (cdr exprs)
+ (mat (car lhss)
+ (car exprs)
+ env)))
+ ((and (null? lhss)
+ (null? exprs))
+ env)
+ (else (k #f))))
+ (k #f)))
+ ((var? lhs)
+ (cond
+ ((assoc lhs env)
+ => (lambda (p)
+ (if (equal? (cdr p) expr)
+ env
+ (k #f))))
+ (else
+ (cons (cons lhs expr)
+ env))))
+ (else (k #f))))
+ (define (apply-preconds rlps env)
+ (if (null? rlps)
+ env
+ (apply-preconds (cdr rlps)
+ (any (lambda (p) (mat (car rlps) p env))
+ preconds))))
+ (substitute (mat (rule-lhs rl)
+ expr
+ (apply-preconds (rule-preconds rl) '()))
(rule-rhs rl)))))
;; (substitute environment expression?) -> expression?
@@ -550,4 +557,11 @@
(equal? (if (pair? x)
(equal? (cons (car x) (cdr y)) x)
'#t)
- y))))
+ y))
+ (define-axiom cons/car+cdr (x y)
+ (equal? (if (pair? x)
+ (equal? (cons (car x) (cdr y)) x)
+ '#t)
+ y))
+ (define-axiom if-same (x y)
+ (equal? (if x y y) y))))