1. The document discusses logic programming and Prolog. It provides examples of defining relationships between individuals using predicates and using compound terms to represent data structures like lists.
2. Control flow in logic programming is determined by logical relationships between clauses rather than order of execution. Programs can use top-down or bottom-up control depending on whether they try to reach hypotheses from goals or vice versa.
3. Complex data structures can be represented using compound terms or predicates, with tradeoffs in readability and efficiency. Predicates are better for modeling relationships while compounds work better for mathematical expressions.