Zulip Chat Archive
Stream: new members
Topic: A new exercice for Mathematics in lean
Nicolas Rolland (Aug 19 2023 at 17:41):
This could be some additional exercice for mathematics in lean, for the S02_Functions.lean
-- universel
def pull_image {α : Type u_1} {β : Type u_2} (f : α → β) (s : Set α) : Set β :=
{ y : β | f ⁻¹' {y} ⊆ s }
example : f ⁻¹' v ⊆ s ↔ v ⊆ pull_image f s := by
sorry
around the exercice
example : f '' s ⊆ v ↔ s ⊆ f ⁻¹' v := by
sorry
Nicolas Rolland (Aug 20 2023 at 18:56):
and here is a solution, in my own beginner style ..
import Mathlib.Tactic
variable {α β : Type _}
variable (f : α → β)
variable (s t : Set α)
variable (u v : Set β)
open Function
open Set
-- The subset hyperdoctrine
-- If a type α is seen as a set, an element of Set α is a subset of the set α.
-- That set of subsets has to be endowed with its categorical structure of (sub)set inclusion, and a proper functor be written etc ... to be a 'hyperdoctrine'
-- push_image ⊣ preimage ⊣ pull_image
-- `preimage` defined in library looks like this
def mypreimage {α : Type u} {β : Type v} (f : α → β) : Set β -> Set α := fun s ↦ { x | f x ∈ s }
--existentiel
def push_image {α : Type u_1} {β : Type u_2} (f : α → β) : Set α -> Set β := fun s ↦ {f a | a ∈ s}
-- push_image ⊣ pre
example : push_image f s ⊆ v ↔ s ⊆ preimage f v := by
constructor
{. intro h
exact fun x (xs : x ∈ s) ↦ xs |> mem_image_of_mem f |> h
}
show s ⊆ f ⁻¹' v → f '' s ⊆ v
intro h
rintro y ⟨x, xs, rfl⟩ -- y ∈ f '' s <=> ∃ x, x ∈ s ^ y = f x
exact h xs
-- universel
def pull_image {α : Type u_1} {β : Type u_2} (f : α → β) (s : Set α) : Set β :=
{ y : β | preimage f {y} ⊆ s }
-- pre ⊣ pull_image
example : preimage f v ⊆ s ↔ v ⊆ pull_image f s := by
constructor
{ exact fun (h: f ⁻¹' v ⊆ s) ↦ by
intro x (xv: x ∈ v)
intro u (fux: u ∈ f ⁻¹' {x})
have xsingletoninv : {x} ⊆ v := singleton_subset_iff.mpr xv
exact fux |> preimage_mono xsingletoninv |> h }
exact fun (h : v ⊆ pull_image f s ) ↦ by
intro x (fxv: x ∈ f ⁻¹' v)
have hx : x ∈ f ⁻¹' (pull_image f s) := preimage_mono h fxv
have : f ⁻¹' (pull_image f s) ⊆ s := by
intro x (hx : preimage f {f x} ⊆ s)
have : x ∈ preimage f {f x} := f x |> mem_singleton
exact hx (this)
exact this hx
Junyan Xu (Aug 21 2023 at 02:47):
This is docs#Set.subset_kernImage_iff
Nicolas Rolland (Aug 21 2023 at 19:03):
thank you for the ref !
It has a much shorter proof, worth its salt
/-- `kernImage f s` is the set of `y` such that `f ⁻¹ y ⊆ s`. -/
def kernImage (f : α → β) (s : Set α) : Set β :=
{ y | ∀ ⦃x⦄, f x = y → x ∈ s }
protected theorem preimage_kernImage : GaloisConnection (preimage f) (kernImage f) := fun a _ =>
⟨fun h _ hx y hy =>
have : f y ∈ a := hy.symm ▸ hx
h this,
fun h x (hx : f x ∈ a) => h hx rfl⟩
Anatole Dedecker (Aug 21 2023 at 19:13):
I don’t understand, shorter than what? Indeed we also have the galois connection lemma as docs#Set.preimage_kernImage
Anatole Dedecker (Aug 21 2023 at 19:13):
But indeed we could add some exercises about Galois connections, that’s always fun to formalize
Last updated: Dec 20 2023 at 11:08 UTC