mirror of
https://github.com/RAIRLab/Spectra.git
synced 2025-12-07 23:50:40 +00:00
First commits.
This commit is contained in:
parent
ecd7c00454
commit
8c78a2f8e5
237 changed files with 36267 additions and 0 deletions
82
snark-20120808r02/examples/front-last-example.lisp
Normal file
82
snark-20120808r02/examples/front-last-example.lisp
Normal file
|
|
@ -0,0 +1,82 @@
|
|||
;;; -*- Mode: Lisp; Syntax: Common-Lisp; Package: snark-user -*-
|
||||
;;; File: front-last-example.lisp
|
||||
;;; The contents of this file are subject to the Mozilla Public License
|
||||
;;; Version 1.1 (the "License"); you may not use this file except in
|
||||
;;; compliance with the License. You may obtain a copy of the License at
|
||||
;;; http://www.mozilla.org/MPL/
|
||||
;;;
|
||||
;;; Software distributed under the License is distributed on an "AS IS"
|
||||
;;; basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
|
||||
;;; License for the specific language governing rights and limitations
|
||||
;;; under the License.
|
||||
;;;
|
||||
;;; The Original Code is SNARK.
|
||||
;;; The Initial Developer of the Original Code is SRI International.
|
||||
;;; Portions created by the Initial Developer are Copyright (C) 1981-2002.
|
||||
;;; All Rights Reserved.
|
||||
;;;
|
||||
;;; Contributor(s): Mark E. Stickel <stickel@ai.sri.com>.
|
||||
|
||||
(in-package :snark-user)
|
||||
|
||||
;;; Let L be a nonempty list.
|
||||
;;; Synthesize a program to compute the FRONT and LAST
|
||||
;;; of the list where LAST of a list is its last element
|
||||
;;; and FRONT is the list of all elements except the last.
|
||||
;;;
|
||||
;;; The program specification is
|
||||
;;; (EXISTS (Y Z) (= L (APPEND Y (CONS Z NIL))))
|
||||
;;; i.e., find Y and Z such that L can be formed by
|
||||
;;; appending Y (the FRONT of L) and a single element list
|
||||
;;; containing Z (the LAST of L).
|
||||
;;;
|
||||
;;; The appropriate inductive axiom is given explicitly in the axiom
|
||||
;;; named induction.
|
||||
;;;
|
||||
;;; Necessary properties of APPEND, CONS, HEAD, and TAIL are given
|
||||
;;; in the axioms named append-nil, append-cons, and cons-definition.
|
||||
;;;
|
||||
;;; A proof of the query is found and the program
|
||||
;;; defined by the values found for variables Y and Z
|
||||
;;; in the specification.
|
||||
;;;
|
||||
;;; Resolution and paramodulation (for equality) are the inference
|
||||
;;; rules used.
|
||||
|
||||
(defun front-last-example ()
|
||||
;; Waldinger program synthesis example 1989-12-14
|
||||
(initialize)
|
||||
(use-resolution)
|
||||
(use-paramodulation)
|
||||
(use-literal-ordering-with-resolution 'literal-ordering-p)
|
||||
(use-literal-ordering-with-paramodulation 'literal-ordering-p)
|
||||
(use-conditional-answer-creation)
|
||||
(declare-constant 'nil)
|
||||
(declare-constant 'l)
|
||||
(declare-function 'head 1)
|
||||
(declare-function 'tail 1)
|
||||
(declare-function 'cons 2)
|
||||
(declare-function 'append 2)
|
||||
(declare-function 'front 1)
|
||||
(declare-function 'last 1)
|
||||
(declare-ordering-greaterp 'l 'nil)
|
||||
(declare-ordering-greaterp 'head 'l)
|
||||
(declare-ordering-greaterp 'tail 'l)
|
||||
(declare-ordering-greaterp 'cons 'head)
|
||||
(declare-ordering-greaterp 'cons 'tail)
|
||||
(declare-ordering-greaterp 'append 'cons)
|
||||
;;(assert '(forall (x) (= x x)))
|
||||
(assert '(/= l nil)
|
||||
:name 'l-nonempty)
|
||||
(assert '(implies (and (/= l nil) (/= (tail l) nil))
|
||||
(= (tail l) (append (front (tail l)) (cons (last (tail l)) nil))))
|
||||
:name 'induction)
|
||||
(assert '(forall (u) (= (append nil u) u))
|
||||
:name 'append-nil)
|
||||
(assert '(forall (u v w) (= (append (cons u v) w) (cons u (append v w))))
|
||||
:name 'append-cons)
|
||||
(assert '(forall (x) (implied-by (= x (cons (head x) (tail x))) (/= x nil)))
|
||||
:name 'cons-definition)
|
||||
(prove '(= l (append ?y (cons ?z nil))) :answer '(values ?y ?z)))
|
||||
|
||||
;;; front-last-example.lisp EOF
|
||||
Loading…
Add table
Add a link
Reference in a new issue