module Proof import Data.Vect import Signature import Term import Formula import Context %default total public export data Proof : Context sig g -> Formula sig n -> Type where Hyp : {c : Context sig g} -> (i : Fin g) -> Proof c (snd $ index i c) EqRefl : (t : Term sig k) -> Proof c (Equal t t) EqSym : Proof c (Equal s t) -> Proof c (Equal t s) EqTrans : Proof c (Equal s t) -> Proof c (Equal t u) -> Proof c (Equal s u) EqE : {phi : Formula sig (S n)} -> Proof c (Equal s t) -> Proof c (elimBinder s phi) -> Proof c (elimBinder t phi) BotE : Proof c Bot -> Proof c phi Contra : Proof (Imp phi Bot :: c) Bot -> Proof c phi ImpI : Proof (phi :: c) psi -> Proof c (Imp phi psi) ImpE : Proof c (Imp phi psi) -> Proof c phi -> Proof c psi ForallI : Proof c phi -> Proof c (Forall phi) ForallE : Proof c (Forall phi) -> Proof c (elimBinder t phi) Weaken : Proof c1 phi -> Subset c1 c2 -> Proof c2 phi