From 35c4714a8cc38b2a8106b54b87684483b5a94f62 Mon Sep 17 00:00:00 2001 From: Masaya Tojo Date: Fri, 18 Dec 2020 09:41:23 +0900 Subject: wip58 --- vikalpa/the-little-prover.scm | 104 ++++++++++++++++++++++++++---------------- 1 file changed, 64 insertions(+), 40 deletions(-) (limited to 'vikalpa/the-little-prover.scm') 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 . (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)))) -- cgit v1.2.3