abstract class Term
case class Var(s: String) extends Term
case class Consts(s: String) extends Term
case class Fun(s: String, ts: List[Term]) extends Term

abstract class Form
case object True extends Form
case object False extends Form
case class And(f1: Form, f2: Form) extends Form
case class Or(f1: Form, f2: Form) extends Form
case class Imp(f1: Form, f2: Form) extends Form
case class Neg(f: Form) extends Form
case class Pred(s: String, ts: List[Term]) extends Form
case class Says(s: String, f: Form) extends Form
