From 3586ed9e429c37c0e3532a631f9644e7b7f3fe3a Mon Sep 17 00:00:00 2001 From: Masaya Tojo Date: Sat, 16 Jan 2021 22:41:22 +0900 Subject: wip80 --- vikalpa/the-little-prover.scm | 163 ------------------------------------------ 1 file changed, 163 deletions(-) delete mode 100644 vikalpa/the-little-prover.scm (limited to 'vikalpa/the-little-prover.scm') diff --git a/vikalpa/the-little-prover.scm b/vikalpa/the-little-prover.scm deleted file mode 100644 index fe7735e..0000000 --- a/vikalpa/the-little-prover.scm +++ /dev/null @@ -1,163 +0,0 @@ -;;; Vikalpa --- Proof Assistant -;;; Copyright © 2020 Masaya Tojo -;;; -;;; This file is part of Vikalpa. -;;; -;;; Vikalpa is free software; you can redistribute it and/or modify it -;;; under the terms of the GNU General Public License as published by -;;; the Free Software Foundation; either version 3 of the License, or -;;; (at your option) any later version. -;;; -;;; Vikalpa is distributed in the hope that it will be useful, but -;;; WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -;;; General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with Vikalpa. If not, see . - -(define-module (vikalpa the-little-prover) - #:export (atom? nat? the-little-prover) - #:use-module (vikalpa)) - -(define (atom? x) - (not (pair? x))) - -(define (nat? x) - (and (integer? x) - (<= 0 x))) - -(define-system the-little-prover () - (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)) - (define-axiom equal-swap (x y) - (equal? (equal? x y) (equal? y x))) - (define-axiom equal-if (x y) - (if (equal? x y) (equal? x y) #t)) - - ;; Axioms of Cons - (define-axiom atom/cons (x y) - (equal? (atom? (cons x y)) #f)) - (define-axiom car/cons (x y) - (equal? (car (cons x y)) x)) - (define-axiom cdr/cons (x y) - (equal? (cdr (cons x y)) y)) - (define-axiom cons/car+cdr (x) - (if (atom? x) - #t - (equal? (cons (car x) (cdr x)) x))) - - ;; Axioms of If - (define-axiom if-true (x y) - (equal? (if #t x y) x)) - (define-axiom if-false (x y) - (equal? (if #f x y) y)) - (define-axiom if-same (x y) - (equal? (if x y y) y)) - (define-axiom if-nest-A (x y z) - (if x (equal? (if x y z) y) #t)) - (define-axiom if-nest-E (x y z) - (if x #t (equal? (if x y z) z))) - - ;; Axioms of Size - (define-axiom nat/size (x) - (equal? (nat? (size x)) #t)) - (define-axiom size/car (x) - (if (atom? x) - #t - (equal? (< (size (car x)) (size x)) #t))) - (define-axiom size/cdr (x) - (if (atom? x) - #t - (equal? (< (size (cdr x)) (size x)) #t))) - - ;; Axioms of `+` and `<` - (define-axiom identity-+ (x) - (if (nat? x) - (equal? (+ 0 x) x) - #t)) - (define-axiom commute-+ (x y) - (equal? (+ x y) (+ y x))) - (define-axiom associate-+ (x y z) - (equal? (+ (+ x y) z) (+ x (+ y z)))) - (define-axiom positive-+ (x y) - (if (< '0 x) - (if (< '0 y) - (equal? (< '0 (+ x y)) #t) - #t) - #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))) - - ;; Prelude - (define-function list-induction (x) - (if (atom? x) - x - (cons (car x) - (list-induction (cdr x))))) - - (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 - (size x) - (((2 3 1) size/car) - ((2 3 2) size/cdr) - ((2 3) if-true) - ((2) if-same) - ((1) nat/size) - (() if-true)))) -- cgit v1.2.3