2023-05-12 13:05:31 +00:00
|
|
|
|
import Mathlib.Data.Set.Basic
|
2023-04-11 12:46:59 +00:00
|
|
|
|
|
2023-05-12 13:05:31 +00:00
|
|
|
|
/-! # Common.Set.Basic
|
2023-05-04 22:37:54 +00:00
|
|
|
|
|
2023-05-12 13:05:31 +00:00
|
|
|
|
Additional theorems and definitions useful in the context of sets.
|
2023-05-04 22:37:54 +00:00
|
|
|
|
-/
|
|
|
|
|
|
2023-05-12 13:05:31 +00:00
|
|
|
|
namespace Set
|
2023-04-11 12:46:59 +00:00
|
|
|
|
|
2023-05-12 13:05:31 +00:00
|
|
|
|
/-
|
2023-04-11 12:46:59 +00:00
|
|
|
|
The Minkowski sum of two sets `s` and `t` is the set
|
|
|
|
|
`s + t = { a + b : a ∈ s, b ∈ t }`.
|
|
|
|
|
-/
|
2023-05-12 17:08:18 +00:00
|
|
|
|
def minkowskiSum {α : Type u} [Add α] (s t : Set α) :=
|
2023-04-11 12:46:59 +00:00
|
|
|
|
{ x | ∃ a ∈ s, ∃ b ∈ t, x = a + b }
|
|
|
|
|
|
2023-04-13 19:58:38 +00:00
|
|
|
|
/--
|
2023-05-04 22:37:54 +00:00
|
|
|
|
The sum of two sets is nonempty **iff** the summands are nonempty.
|
2023-04-13 19:58:38 +00:00
|
|
|
|
-/
|
2023-05-12 13:05:31 +00:00
|
|
|
|
theorem nonempty_minkowski_sum_iff_nonempty_add_nonempty {α : Type u} [Add α]
|
|
|
|
|
{s t : Set α}
|
2023-05-12 17:08:18 +00:00
|
|
|
|
: (minkowskiSum s t).Nonempty ↔ s.Nonempty ∧ t.Nonempty := by
|
2023-04-13 19:58:38 +00:00
|
|
|
|
apply Iff.intro
|
|
|
|
|
· intro h
|
|
|
|
|
have ⟨x, hx⟩ := h
|
|
|
|
|
have ⟨a, ⟨ha, ⟨b, ⟨hb, _⟩⟩⟩⟩ := hx
|
|
|
|
|
apply And.intro
|
|
|
|
|
· exact ⟨a, ha⟩
|
|
|
|
|
· exact ⟨b, hb⟩
|
|
|
|
|
· intro ⟨⟨a, ha⟩, ⟨b, hb⟩⟩
|
|
|
|
|
exact ⟨a + b, ⟨a, ⟨ha, ⟨b, ⟨hb, rfl⟩⟩⟩⟩⟩
|
|
|
|
|
|
2023-05-12 13:05:31 +00:00
|
|
|
|
/--
|
|
|
|
|
The characteristic function of a set `S`.
|
|
|
|
|
|
|
|
|
|
It returns `1` if the specified input belongs to `S` and `0` otherwise.
|
|
|
|
|
-/
|
2023-05-12 19:17:34 +00:00
|
|
|
|
def characteristic (S : Set α) (x : α) [Decidable (x ∈ S)] : Nat :=
|
2023-05-12 13:05:31 +00:00
|
|
|
|
if x ∈ S then 1 else 0
|
|
|
|
|
|
|
|
|
|
end Set
|