sealed trait Formula
object Formula {
sealed trait Atomic extends Formula (1)
case object True extends Atomic
case object False extends Atomic
case class Type(name: String) extends Atomic
case class And(fst: Formula, snd: Formula) extends Formula
case class Or(inl: Formula, inr: Formula) extends Formula
case class Implies(from: Formula, to: Formula) extends Formula
}