summaryrefslogtreecommitdiff
path: root/vikalpa/the-little-prover.scm
diff options
context:
space:
mode:
Diffstat (limited to 'vikalpa/the-little-prover.scm')
-rw-r--r--vikalpa/the-little-prover.scm104
1 files changed, 64 insertions, 40 deletions
diff --git a/vikalpa/the-little-prover.scm b/vikalpa/the-little-prover.scm
index 338843b..fe7735e 100644
--- a/vikalpa/the-little-prover.scm
+++ b/vikalpa/the-little-prover.scm
@@ -17,24 +17,53 @@
;;; along with Vikalpa. If not, see <http://www.gnu.org/licenses/>.
(define-module (vikalpa the-little-prover)
- #:export (the-little-prover)
+ #:export (atom? nat? the-little-prover)
#:use-module (vikalpa))
-(define (size x)
- (if (pair? x)
- (+ (size (car x))
- (size (cdr x)))
- 0))
+(define (atom? x)
+ (not (pair? x)))
+
+(define (nat? x)
+ (and (integer? x)
+ (<= 0 x)))
(define-system the-little-prover ()
- (define-function atom? (x)
- (not (pair? x)))
- (define-builtin-function size (x))
- (define-builtin-function + (x y))
- (define-builtin-function natural? (x))
- (define-builtin-function < (x y))
- (define-totality-claim natural? natural? <)
-
+ (define-core-function atom? (x) atom?)
+ (define-core-function nat? (x) nat?)
+ (define-core-function < (x y)
+ (lambda (x y)
+ (if (number? x)
+ (if (number? y)
+ (< x y)
+ (< x 0))
+ (if (number? y)
+ (< 0 y)
+ #f))))
+ (set-measure-predicate nat?)
+ (set-measure-less-than <)
+ (define-core-function + (x y)
+ (lambda (x y)
+ (if (number? x)
+ (if (number? y)
+ (+ x y)
+ x)
+ (if (number? y)
+ y
+ 0))))
+ (define-core-function cons (x y) cons)
+ (define-core-function car (x)
+ (lambda (x)
+ (if (atom? x) '() (car x))))
+ (define-core-function cdr (x)
+ (lambda (x)
+ (if (atom? x) '() (cdr x))))
+ (define-trivial-total-function size (x)
+ (if (atom? x)
+ 0
+ (+ 1
+ (+ (size (car x))
+ (size (cdr x))))))
+
;; Axioms of Equal
(define-axiom equal-same (x)
(equal? (equal? x x) #t))
@@ -68,8 +97,8 @@
(if x #t (equal? (if x y z) z)))
;; Axioms of Size
- (define-axiom natural?/size (x)
- (equal? (natural? (size x)) #t))
+ (define-axiom nat/size (x)
+ (equal? (nat? (size x)) #t))
(define-axiom size/car (x)
(if (atom? x)
#t
@@ -81,8 +110,8 @@
;; Axioms of `+` and `<`
(define-axiom identity-+ (x)
- (if (natural? x)
- (equal? (+ (+ x y) z))
+ (if (nat? x)
+ (equal? (+ 0 x) x)
#t))
(define-axiom commute-+ (x y)
(equal? (+ x y) (+ y x)))
@@ -94,23 +123,16 @@
(equal? (< '0 (+ x y)) #t)
#t)
#t))
- (define-axiom natural?/+ (x y)
- (if (natural? x)
- (if (natural? y)
- (equal? (natural? (+ x y)) #t)
+ (define-axiom nat/+ (x y)
+ (if (nat? x)
+ (if (nat? y)
+ (equal? (nat? (+ x y)) #t)
#t)
#t))
(define-axiom common-addends-< (x y z)
- (equal? (< (+ x z) (+ y z) (< x y))))
-
- ;; Axioms for Vikalpa
- (define-axiom natural?/0 ()
- (equal? (natural? '0) #t))
- (define-axiom natural?/succ (x)
- (if (natural? x)
- (equal? (natural? (succ x)) #t)
- #t))
-
+ (equal? (< (+ x z) (+ y z))
+ (< x y)))
+
;; Prelude
(define-function list-induction (x)
(if (atom? x)
@@ -118,22 +140,24 @@
(cons (car x)
(list-induction (cdr x)))))
- (define-proof list-induction
- (natural? (size x))
- (((2 3) size/cdr)
- ((2) if-same)
- (() if-same)))
-
(define-function star-induction (x)
(if (atom? x)
x
(cons (star-induction (car x))
(star-induction (cdr x)))))
+ (define-proof list-induction
+ (size x)
+ (((2 3) size/cdr)
+ ((2) if-same)
+ ((1) nat/size)
+ (() if-true)))
+
(define-proof star-induction
- (natural? (size x))
+ (size x)
(((2 3 1) size/car)
((2 3 2) size/cdr)
((2 3) if-true)
((2) if-same)
- (() if-same))))
+ ((1) nat/size)
+ (() if-true))))