From 09a7875f03b978dfb003cc0b01d617c467197730 Mon Sep 17 00:00:00 2001 From: William Ball Date: Sun, 27 Jul 2025 17:44:20 -0700 Subject: [PATCH] added test file --- src/Test.idr | 128 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 src/Test.idr diff --git a/src/Test.idr b/src/Test.idr new file mode 100644 index 0000000..9012163 --- /dev/null +++ b/src/Test.idr @@ -0,0 +1,128 @@ +module Test + +import Signature +import Term +import Data.Vect +import Formula +import Context +import Proof + +namespace Sig + public export + zero : FuncSym + zero = MkFuncSym "0" 0 + + public export + suc : FuncSym + suc = MkFuncSym "S" 1 + + public export + plus : FuncSym + plus = MkFuncSym "+" 2 + + public export + times : FuncSym + times = MkFuncSym "*" 2 + + public export + leq : RelSym + leq = MkRelSym "<=" 2 + + public export + NT : Signature 4 1 + NT = MkSignature + [ zero, suc, plus, times ] + [ leq ] + +s0ps0 : Term NT 0 +s0ps0 = Func 2 + [ Func 1 [ Func 0 [] ] + , Func 1 [ Func 0 [] ] + ] + +O : Term NT d +O = Func 0 [] + +S : Term NT d -> Term NT d +S t = Func 1 [ t ] + +export infixl 8 + +(+) : Term NT d -> Term NT d -> Term NT d +s + t = Func 2 [ s, t ] + +export infixl 9 * +(*) : Term NT d -> Term NT d -> Term NT d +s * t = Func 3 [ s, t ] + +Y : Term NT (S d) +Y = Var 0 + +X : Term NT (S (S d)) +X = Var 1 + +private infix 3 .= +(.=) : Term sig n -> Term sig n -> Formula sig n +(.=) = Equal + +(<=) : Term NT n -> Term NT n -> Formula NT n +t1 <= t2 = Rel 0 [ t1, t2 ] + +addComm : Formula NT 0 +addComm = Forall $ Forall $ Y + X .= X + Y + +private infixr 2 ==> +(==>) : Formula sig n -> Formula sig n -> Formula sig n +(==>) = Imp + +Not : Formula sig n -> Formula sig n +Not phi = phi ==> Bot + +(&&) : Formula sig n -> Formula sig n -> Formula sig n +phi && psi = Not (phi ==> Not psi) + +(||) : Formula sig n -> Formula sig n -> Formula sig n +phi || psi = Not (Not phi && Not psi) + +zeroNotSuc : Formula NT d +zeroNotSuc = Forall $ Not $ O .= S (Var 0) + +sucInj : Formula NT d +sucInj = Forall $ Forall $ S (Var 0) .= S (Var 1) ==> Var 0 .= Var 1 + +addZeroR : Formula NT d +addZeroR = Forall $ Var 0 + O .= Var 0 + +addSR : Formula NT d +addSR = Forall $ Forall $ X + S Y .= S (X + Y) + +mulZeroR : Formula NT d +mulZeroR = Forall $ Y * O .= O + +mulSucR : Formula NT d +mulSucR = Forall $ Forall $ X * S Y .= X * Y + X + +induction : {d : _} -> Formula NT (S d) -> Formula NT d +induction phi = + elimBinder O phi ==> + (Forall $ phi ==> (sub 0 (S Y) phi)) ==> + Forall phi + +doubleNeg : + {d : _} -> {c : _} -> + {phi : Formula sig d} -> + Proof c (Not (Not phi)) -> Proof c phi +doubleNeg pf = + Contra $ + ImpE (Weaken pf (Missing Same)) $ + Hyp 0 + +AndI : {d : _} -> {c : _} -> + {phi, psi : Formula sig d} -> + Proof c phi -> Proof c psi -> + Proof c (phi && psi) +AndI pfPhi pfPsi = + ImpI $ + ImpE + (ImpE (Hyp 0) $ + Weaken pfPhi $ Missing Same) + (Weaken pfPsi $ Missing Same)