Included Books
other
(in-package "ACL2")
include-book
(include-book "misc/hons-help2" :dir :system)
include-book
(include-book "alist-defs")
include-book
(include-book "std/lists/sets" :dir :system)
include-book
(include-book "std/alists/top" :dir :system)
include-book
(include-book "witness-cp")
other
(defsection alists-agree-witnessing
(defwitness alists-agree-witnessing
:predicate (not (alists-agree keys al1 al2))
:expr (not (let ((x (alists-disagree-witness keys al1 al2)))
(implies (member-equal x keys)
(equal (hons-assoc-equal x al1) (hons-assoc-equal x al2)))))
:hints ('(:in-theory '(alists-agree-iff-witness)))
:generalize (((alists-disagree-witness keys al1 al2) . adw)))
(definstantiate alists-agree-instancing
:predicate (alists-agree keys al1 al2)
:vars (x)
:expr (implies (member x keys)
(equal (hons-assoc-equal x al1) (hons-assoc-equal x al2)))
:hints ('(:in-theory '(alists-agree-hons-assoc-equal))))
(defexample alists-agree-hons-assoc-equal-example
:pattern (hons-assoc-equal x a)
:templates (x)
:instance-rulename alists-agree-instancing)
(defexample alists-agree-member-keys-example
:pattern (member-equal x (alist-keys a))
:templates (x)
:instance-rulename alists-agree-instancing))
other
(defsection sub-alistp-witnessing
(defwitness sub-alistp-witnessing
:predicate (not (sub-alistp al1 al2))
:expr (not (let ((x (not-sub-alistp-witness al1 al2)))
(implies (hons-assoc-equal x al1)
(equal (hons-assoc-equal x al1) (hons-assoc-equal x al2)))))
:hints ('(:in-theory '(sub-alistp-iff-witness)))
:generalize (((not-sub-alistp-witness al1 al2) . nsaw)))
(definstantiate sub-alistp-instancing
:predicate (sub-alistp al1 al2)
:vars (x)
:expr (implies (hons-assoc-equal x al1)
(equal (hons-assoc-equal x al1) (hons-assoc-equal x al2)))
:hints ('(:in-theory '(sub-alistp-hons-assoc-equal))))
(defexample sub-alistp-hons-assoc-equal-example
:pattern (hons-assoc-equal x a)
:templates (x)
:instance-rulename sub-alistp-instancing)
(defexample sub-alistp-member-keys-example
:pattern (member-equal x (alist-keys a))
:templates (x)
:instance-rulename sub-alistp-instancing))
other
(defsection alist-equiv-witnessing
(defwitness alist-equiv-witnessing
:predicate (not (alist-equiv al1 al2))
:expr (not (let ((x (alist-equiv-bad-guy al1 al2)))
(equal (hons-assoc-equal x al1) (hons-assoc-equal x al2))))
:hints ('(:in-theory '(alist-equiv-iff-agree-on-bad-guy)))
:generalize (((alist-equiv-bad-guy al1 al2) . aebg)))
(definstantiate alist-equiv-instancing
:predicate (alist-equiv al1 al2)
:vars (x)
:expr (equal (hons-assoc-equal x al1) (hons-assoc-equal x al2))
:hints ('(:by (:instance alist-equiv-implies-equal-hons-assoc-equal-2
(a al1)
(a-equiv al2)))))
(defexample alist-equiv-hons-assoc-equal-example
:pattern (hons-assoc-equal x a)
:templates (x)
:instance-rulename alist-equiv-instancing)
(defexample alist-equiv-member-keys-example
:pattern (member-equal x (alist-keys a))
:templates (x)
:instance-rulename alist-equiv-instancing))
other
(defsection alists-compatible-witnessing
(defwitness alists-compatible-witnessing
:predicate (not (alists-compatible al1 al2))
:expr (not (let ((x (alists-incompatible-witness al1 al2)))
(implies (and (hons-assoc-equal x al1) (hons-assoc-equal x al2))
(equal (hons-assoc-equal x al1) (hons-assoc-equal x al2)))))
:hints ('(:in-theory '(alists-compatible-iff-agree-on-bad-guy)))
:generalize (((alists-incompatible-witness al1 al2) . aebg)))
(definstantiate alists-compatible-instancing
:predicate (alists-compatible al1 al2)
:vars (x)
:expr (implies (and (hons-assoc-equal x al1) (hons-assoc-equal x al2))
(equal (hons-assoc-equal x al1) (hons-assoc-equal x al2)))
:hints ('(:in-theory '(alists-compatible-hons-assoc-equal))))
(defexample alists-compatible-hons-assoc-equal-example
:pattern (hons-assoc-equal x a)
:templates (x)
:instance-rulename alists-compatible-instancing)
(defexample alists-compatible-member-keys-example
:pattern (member-equal x (alist-keys a))
:templates (x)
:instance-rulename alists-compatible-instancing))
other
(def-witness-ruleset alist-reasoning-rules
'(alists-agree-witnessing alists-agree-instancing
alists-agree-hons-assoc-equal-example
alists-agree-member-keys-example
sub-alistp-witnessing
sub-alistp-instancing
sub-alistp-hons-assoc-equal-example
sub-alistp-member-keys-example
alist-equiv-witnessing
alist-equiv-instancing
alist-equiv-hons-assoc-equal-example
alist-equiv-member-keys-example
alists-compatible-witnessing
alists-compatible-instancing
alists-compatible-hons-assoc-equal-example
alists-compatible-member-keys-example))
alist-reasoningmacro
(defmacro alist-reasoning nil '(and stable-under-simplificationp (witness :ruleset alist-reasoning-rules)))