Suppose that I have the following expression in Isabelle/HOL:
typedecl Person
typedecl Car
consts age :: "Person ⇒ int"
consts drives ::"(Person × Car) set"
consts owns ::"(Person × Car) set"
This is supposed to model Person and Car types with two relations between them, named drives and owns, and also the age property of Person.
I would like to state that everybody who owns a car, would definitely drive the car, and people who drive cars are greater than 17, So the constraints:
(∀a. a ∈ owns ⟶ a ∈ drives)
(∀d ∈ drives. age (fst d) > 17)
What is the best way to define these kind of constraints in Isabelle, in the sense that I can prove some properties over the model, assuming these constraints hold true?