Logic programming is usually taken to be synonymous with relational programming. Two important criteria for a broader logic programming language are its ability to avoid extra-logical features, such as cut, assert, retract, etc., and its amenability to efficient compilation. The broader basis consists of three logical forms: equations, relations, and subset assertions, along with an accompanying set of matching and unification operations. Equations provide the ability to define deterministic operations without Prolog's cut. Subset assertions can be used to define more declaratively Prolog's setof as well as transitive-closure operations, both of which are traditionally expressed using assert and retract. To demonstrate that this broader framework is practical, further studies will be made in (1) better integrating the three logical forms, (2) developing an efficient implementation, (3) carrying out substantial applications, and (4) examining useful extensions and variations.