From 6062310e7c7dc97b1e3160af83d9bc33c3b30590 Mon Sep 17 00:00:00 2001
From: Hans-Joerg Schurr <commits@schurr.at>
Date: Mon, 29 Jan 2024 17:44:33 -0600
Subject: [PATCH] Fix remaining typos in signature skeleton

---
 althelf/rules.smt3 | 95 +++++++++++++++++++++++++++-------------------
 1 file changed, 56 insertions(+), 39 deletions(-)

diff --git a/althelf/rules.smt3 b/althelf/rules.smt3
index 9f5b476..e62067a 100644
--- a/althelf/rules.smt3
+++ b/althelf/rules.smt3
@@ -103,7 +103,7 @@
 )
 
 ;TRUST
-(declare-rule la_generic ((CL Bool) (coeffs Real :int))
+(declare-rule la_generic ((CL Bool) (coeffs Real))
   :args (CL coeffs)
   :requires (((check_la_generic coeffs CL) true))
   :conclusion CL
@@ -231,11 +231,28 @@
   :conclusion (@cl (= t1 t2))
 )
 
+(program last_eq_right ((T Type) (t1 T) (t2 T) (eqs Bool))
+  (Bool) Bool
+  (
+    ((last_eq_right (and (@cl (= t1 t2)) true)) t2)
+    ((last_eq_right (and (@cl (= t1 t2)) eqs)) (last_eq_right eqs))
+  )
+)
+
+(program make_trans ((T Type) (t1 T) (t2 T) (eqs Bool :list))
+  (Bool) Bool
+  (
+   ((make_trans (and (@cl (= t1 t2) true))) (= t1 t2))
+   ((make_trans (and (@cl (= t1 t2) eqs))) (= t1 (last_eq_right eqs)))
+  )
+)
+
+;TODO what about scopes here? can a premise come from an outers scope
 ;TODO: implement mkTrans
 (declare-rule trans ((Eqs Bool))
   :premise-list Eqs and
-  :args ((@cl (mkTrans Eqs)))
-  :conclusion (@cl (mkTrans Eqs))
+  :args ((@cl (make_trans Eqs)))
+  :conclusion (@cl (make_trans Eqs))
 )
 
 ;TODO
@@ -332,7 +349,7 @@
 (declare-rule and ((C Bool) (CN Bool :list) (phi Bool))
   :premises ((@cl (and C CN)))
   :args ((@cl phi))
-  :requres ((contains (and C CN) phi) true)
+  :requires (((contains (and C CN) phi) true))
   :conclusion (@cl phi)
 )
 
@@ -340,12 +357,12 @@
 (declare-rule not_or ((C Bool) (CN Bool :list) (phi Bool))
   :premises ((@cl (not (or C CN))))
   :args ((@cl (not phi)))
-  :requres ((contains (or C CN) phi) true)
+  :requires (((contains (or C CN) phi) true))
   :conclusion (@cl (not phi))
 )
 
 ;TODO
-(program check_or ((ors Bool) (@clause Bool))
+(program check_or ((ors Bool) (clause Bool))
   (Bool Bool) Bool
   (
    ((check_or ors clause) true)
@@ -357,7 +374,7 @@
 (declare-rule or ((C Bool) (CN Bool :list) (CP Bool) (CNP Bool :list))
   :premises ((@cl (or C CN)))
   :args ((@cl CP CNP))
-  :requres ((check_or (or C CN) (@cl CP CNP)) true)
+  :requires (((check_or (or C CN) (@cl CP CNP)) true))
   :conclusion (@cl CP CNP)
 )
 
@@ -365,7 +382,15 @@
 (program clEqual ((CL1 Bool) (CL2 Bool))
   (Bool Bool) Bool
   (
-   ((@clEqual CL1 CL2) true)
+   ((clEqual CL1 CL2) true)
+  )
+)
+
+;TODO: test this is likely wrong
+(program transform_not_and ((l Bool) (ls Bool :list))
+  (Bool Bool) Bool
+  (
+   ((transform_not_and l ls) (@cl (not l) (transform_not_and ls)))
   )
 )
 
@@ -373,7 +398,7 @@
 (declare-rule not_and ((CL Bool) (C Bool) (CN Bool :list))
   :premises ((@cl (not (and C CN))))
   :args (CL)
-  :requires (((@clEqual (transform_not_and (and C CN)) CL) true))
+  :requires (((clEqual (transform_not_and (and C CN)) CL) true))
   :conclusion CL
 )
 
@@ -381,7 +406,7 @@
 (declare-rule xor1 ((CL Bool) (phi1 Bool) (phi2 Bool))
   :premises ((@cl (xor phi1 phi2)))
   :args (CL)
-  :requires (((@clEqual (@cl phi1 phi2) CL) true))
+  :requires (((clEqual (@cl phi1 phi2) CL) true))
   :conclusion CL
 )
 
@@ -389,7 +414,7 @@
 (declare-rule xor2 ((CL Bool) (phi1 Bool) (phi2 Bool))
   :premises ((@cl (xor phi1 phi2)))
   :args (CL)
-  :requires (((@clEqual (@cl (not phi1) (not phi2)) CL) true))
+  :requires (((clEqual (@cl (not phi1) (not phi2)) CL) true))
   :conclusion CL
 )
 
@@ -397,7 +422,7 @@
 (declare-rule not_xor1 ((CL Bool) (phi1 Bool) (phi2 Bool))
   :premises ((@cl (not (xor phi1 phi2))))
   :args (CL)
-  :requires (((@clEqual (@cl phi1 (not phi2)) CL) true))
+  :requires (((clEqual (@cl phi1 (not phi2)) CL) true))
   :conclusion CL
 )
 
@@ -405,7 +430,7 @@
 (declare-rule not_xor2 ((CL Bool) (phi1 Bool) (phi2 Bool))
   :premises ((@cl (not (xor phi1 phi2))))
   :args (CL)
-  :requires (((@clEqual (@cl (not phi1) phi2) CL) true))
+  :requires (((clEqual (@cl (not phi1) phi2) CL) true))
   :conclusion CL
 )
 
@@ -413,7 +438,7 @@
 (declare-rule implies ((CL Bool) (phi1 Bool) (phi2 Bool))
   :premises ((@cl (=> phi1 phi2)))
   :args (CL)
-  :requires (((@clEqual (@cl (not phi1) phi2) CL) true))
+  :requires (((clEqual (@cl (not phi1) phi2) CL) true))
   :conclusion CL
 )
 
@@ -433,7 +458,7 @@
 (declare-rule equiv1 ((CL Bool) (phi1 Bool) (phi2 Bool))
   :premises ((@cl (= phi1 phi2)))
   :args (CL)
-  :requires (((@clEqual (@cl (not phi1) phi2) CL) true))
+  :requires (((clEqual (@cl (not phi1) phi2) CL) true))
   :conclusion CL
 )
 
@@ -441,15 +466,7 @@
 (declare-rule equiv2 ((CL Bool) (phi1 Bool) (phi2 Bool))
   :premises ((@cl (= phi1 phi2)))
   :args (CL)
-  :requires (((@clEqual (@cl phi1 (not phi2)) CL) true))
-  :conclusion CL
-)
-
-;TRUST
-(declare-rule not_equiv1 ((CL Bool) (phi1 Bool) (phi2 Bool))
-  :premises ((@cl (not (= phi1 phi2))))
-  :args (CL)
-  :requires (((@clEqual (@cl phi1 phi2) CL) true))
+  :requires (((clEqual (@cl phi1 (not phi2)) CL) true))
   :conclusion CL
 )
 
@@ -457,7 +474,7 @@
 (declare-rule not_equiv1 ((CL Bool) (phi1 Bool) (phi2 Bool))
   :premises ((@cl (not (= phi1 phi2))))
   :args (CL)
-  :requires (((@clEqual (@cl (not phi1) (not phi2)) CL) true))
+  :requires (((clEqual (@cl phi1 phi2) CL) true))
   :conclusion CL
 )
 
@@ -687,18 +704,18 @@
 )
 
 ;TRUST
-(declare-rule ite1 ((phi1 Bool) (phi2 Bool) (phi3 Bool) (CL Bool)
+(declare-rule ite1 ((phi1 Bool) (phi2 Bool) (phi3 Bool) (CL Bool))
   :premises ((@cl (ite phi1 phi2 phi3)))
   :args (CL)
-  :requires (((@clEqual (@cl phi1 phi3) CL) true))
+  :requires (((clEqual (@cl phi1 phi3) CL) true))
   :conclusion CL
 )
 
 ;TRUST
-(declare-rule ite2 ((phi1 Bool) (phi2 Bool) (phi3 Bool) (CL Bool)
+(declare-rule ite2 ((phi1 Bool) (phi2 Bool) (phi3 Bool) (CL Bool))
   :premises ((@cl (ite phi1 phi2 phi3)))
   :args (CL)
-  :requires (((@clEqual (@cl (not phi1) phi2) CL) true))
+  :requires (((clEqual (@cl (not phi1) phi2) CL) true))
   :conclusion CL
 )
 
@@ -766,7 +783,7 @@
 (declare-rule not_ite1 ((phi1 Bool) (phi2 Bool) (phi3 Bool) (CL Bool))
   :premises ((@cl (not (ite phi1 phi2 phi3))))
   :args (CL)
-  :requires (((@clEqual (@cl phi1 (not phi3)) CL) true))
+  :requires (((clEqual (@cl phi1 (not phi3)) CL) true))
   :conclusion CL
 )
 
@@ -774,7 +791,7 @@
 (declare-rule not_ite2 ((phi1 Bool) (phi2 Bool) (phi3 Bool) (CL Bool))
   :premises ((@cl (not (ite phi1 phi2 phi3))))
   :args (CL)
-  :requires (((@clEqual (@cl (not phi1) (not phi2)) CL) true))
+  :requires (((clEqual (@cl (not phi1) (not phi2)) CL) true))
   :conclusion CL
 )
 
@@ -930,7 +947,7 @@
 
 ;TODO
 (program check_onepoint ((ctx @Context) (xs @VarList) (ys @VarList) (Q (-> @VarList Bool Bool)) (T Type) (phi T) (phiP T))
-  (@Context (-> @VarList Bool Bool) @VarList T T) Bool
+  (@Context (-> @VarList Bool Bool) @VarList @VarList T T) Bool
   (
    ((check_onepoint ctx Q xs ys phi phiP) true)
   )
@@ -940,7 +957,7 @@
 (declare-rule onepoint ((ctx @Context) (xs @VarList) (ys @VarList) (Q (-> @VarList Bool Bool)) (T Type) (phi T) (phiP T))
   :assumption ctx
   :premises ((@cl (= phi phiP)))
-  :args (((@cl (= (Q xs phi) (Q ys phiP)))))
+  :args ((@cl (= (Q xs phi) (Q ys phiP))))
   :requires (((check_onepoint ctx Q xs ys phi phiP) true))
   :conclusion (@cl (= (Q xs phi) (Q ys phiP)))
 )
@@ -1081,11 +1098,11 @@
 )
 
 ; TODO: We don't have a representation of Let!
-(declare-rule let ()
-  :premise-list Eqs and
-  :args ((true))
-  :conclusion true
-)
+; (declare-rule let ()
+;   :premise-list Eqs and
+;   :args ((true))
+;   :conclusion true
+; )
 
 ;TODO
 (program check_distinct_elim ((l Bool) (r Bool))
@@ -1132,7 +1149,7 @@
 )
 
 ;TRUST
-(declare-rule bfun_elim ((l Bool) (r Bool))
+(declare-rule bfun_elim ((psi Bool) (phi Bool))
   :premises ((@cl psi))
   :args ((@cl phi))
   :requires (((check_bfun_elim psi phi) true))
-- 
GitLab