α : Type u_1
M : Type u_2
N : Type ?u.245586
P : Type ?u.245589
R : Type u_4
S : Type ?u.245595
inst✝⁸ : Semiring R
inst✝⁷ : Semiring S
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
inst✝⁴ : AddCommMonoid N
inst✝³ : Module R N
inst✝² : AddCommMonoid P
inst✝¹ : Module R P
α' : Type u_3
α'' : Type ?u.245690
inst✝ : Nonempty α
f : α → α'
s : Set α
inhabited_h : Inhabited α
⊢ map (lmapDomain M R f) (supported M R s) = supported M R (f '' s)
α : Type u_1
M : Type u_2
N : Type ?u.245586
P : Type ?u.245589
R : Type u_4
S : Type ?u.245595
inst✝⁸ : Semiring R
inst✝⁷ : Semiring S
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
inst✝⁴ : AddCommMonoid N
inst✝³ : Module R N
inst✝² : AddCommMonoid P
inst✝¹ : Module R P
α' : Type u_3
α'' : Type ?u.245690
inst✝ : Nonempty α
f : α → α'
s : Set α
⊢ map (lmapDomain M R f) (supported M R s) = supported M R (f '' s)
inhabit α
α : Type u_1
M : Type u_2
N : Type ?u.245586
P : Type ?u.245589
R : Type u_4
S : Type ?u.245595
inst✝⁸ : Semiring R
inst✝⁷ : Semiring S
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
inst✝⁴ : AddCommMonoid N
inst✝³ : Module R N
inst✝² : AddCommMonoid P
inst✝¹ : Module R P
α' : Type u_3
α'' : Type ?u.245690
inst✝ : Nonempty α
f : α → α'
s : Set α
inhabited_h : Inhabited α
⊢ supported M R (f '' s) ≤ map (lmapDomain M R f) (supported M R s)
α : Type u_1
M : Type u_2
N : Type ?u.245586
P : Type ?u.245589
R : Type u_4
S : Type ?u.245595
inst✝⁸ : Semiring R
inst✝⁷ : Semiring S
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
inst✝⁴ : AddCommMonoid N
inst✝³ : Module R N
inst✝² : AddCommMonoid P
inst✝¹ : Module R P
α' : Type u_3
α'' : Type ?u.245690
inst✝ : Nonempty α
f : α → α'
s : Set α
inhabited_h : Inhabited α
⊢ map (lmapDomain M R f) (supported M R s) = supported M R (f '' s)
refine
  le_antisymm
    (map_le_iff_le_comap.2 <|
      le_trans (supported_mono <| Set.subset_preimage_image _ _)
        (supported_comap_lmapDomain M R _ _))
    ?_
α : Type u_1
M : Type u_2
N : Type ?u.245586
P : Type ?u.245589
R : Type u_4
S : Type ?u.245595
inst✝⁸ : Semiring R
inst✝⁷ : Semiring S
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
inst✝⁴ : AddCommMonoid N
inst✝³ : Module R N
inst✝² : AddCommMonoid P
inst✝¹ : Module R P
α' : Type u_3
α'' : Type ?u.245690
inst✝ : Nonempty α
f : α → α'
s : Set α
inhabited_h : Inhabited α
l : α' →₀ M
hl : l ∈ supported M R (f '' s)
⊢ l ∈ map (lmapDomain M R f) (supported M R s)
α : Type u_1
M : Type u_2
N : Type ?u.245586
P : Type ?u.245589
R : Type u_4
S : Type ?u.245595
inst✝⁸ : Semiring R
inst✝⁷ : Semiring S
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
inst✝⁴ : AddCommMonoid N
inst✝³ : Module R N
inst✝² : AddCommMonoid P
inst✝¹ : Module R P
α' : Type u_3
α'' : Type ?u.245690
inst✝ : Nonempty α
f : α → α'
s : Set α
inhabited_h : Inhabited α
⊢ supported M R (f '' s) ≤ map (lmapDomain M R f) (supported M R s)
intro l hl
case refine'_1
α : Type u_1
M : Type u_2
N : Type ?u.245586
P : Type ?u.245589
R : Type u_4
S : Type ?u.245595
inst✝⁸ : Semiring R
inst✝⁷ : Semiring S
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
inst✝⁴ : AddCommMonoid N
inst✝³ : Module R N
inst✝² : AddCommMonoid P
inst✝¹ : Module R P
α' : Type u_3
α'' : Type ?u.245690
inst✝ : Nonempty α
f : α → α'
s : Set α
inhabited_h : Inhabited α
l : α' →₀ M
hl : l ∈ supported M R (f '' s)
x : α
hx : x ∈ ↑(↑(lmapDomain M R (Function.invFunOn f s)) l).support
⊢ x ∈ s

case refine'_2
α : Type u_1
M : Type u_2
N : Type ?u.245586
P : Type ?u.245589
R : Type u_4
S : Type ?u.245595
inst✝⁸ : Semiring R
inst✝⁷ : Semiring S
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
inst✝⁴ : AddCommMonoid N
inst✝³ : Module R N
inst✝² : AddCommMonoid P
inst✝¹ : Module R P
α' : Type u_3
α'' : Type ?u.245690
inst✝ : Nonempty α
f : α → α'
s : Set α
inhabited_h : Inhabited α
l : α' →₀ M
hl : l ∈ supported M R (f '' s)
⊢ ↑(lmapDomain M R f) (↑(lmapDomain M R (Function.invFunOn f s)) l) = l
α : Type u_1
M : Type u_2
N : Type ?u.245586
P : Type ?u.245589
R : Type u_4
S : Type ?u.245595
inst✝⁸ : Semiring R
inst✝⁷ : Semiring S
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
inst✝⁴ : AddCommMonoid N
inst✝³ : Module R N
inst✝² : AddCommMonoid P
inst✝¹ : Module R P
α' : Type u_3
α'' : Type ?u.245690
inst✝ : Nonempty α
f : α → α'
s : Set α
inhabited_h : Inhabited α
l : α' →₀ M
hl : l ∈ supported M R (f '' s)
⊢ l ∈ map (lmapDomain M R f) (supported M R s)
refine' ⟨(lmapDomain M R (Function.invFunOn f s) : (α' →₀ M) →ₗ[R] α →₀ M) l, fun x hx => _, _⟩
case refine'_1.intro.intro
α : Type u_1
M : Type u_2
N : Type ?u.245586
P : Type ?u.245589
R : Type u_4
S : Type ?u.245595
inst✝⁸ : Semiring R
inst✝⁷ : Semiring S
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
inst✝⁴ : AddCommMonoid N
inst✝³ : Module R N
inst✝² : AddCommMonoid P
inst✝¹ : Module R P
α' : Type u_3
α'' : Type ?u.245690
inst✝ : Nonempty α
f : α → α'
s : Set α
inhabited_h : Inhabited α
l : α' →₀ M
hl : l ∈ supported M R (f '' s)
c : α'
hc : c ∈ l.support
hx : Function.invFunOn f s c ∈ ↑(↑(lmapDomain M R (Function.invFunOn f s)) l).support
⊢ Function.invFunOn f s c ∈ s
case refine'_1
α : Type u_1
M : Type u_2
N : Type ?u.245586
P : Type ?u.245589
R : Type u_4
S : Type ?u.245595
inst✝⁸ : Semiring R
inst✝⁷ : Semiring S
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
inst✝⁴ : AddCommMonoid N
inst✝³ : Module R N
inst✝² : AddCommMonoid P
inst✝¹ : Module R P
α' : Type u_3
α'' : Type ?u.245690
inst✝ : Nonempty α
f : α → α'
s : Set α
inhabited_h : Inhabited α
l : α' →₀ M
hl : l ∈ supported M R (f '' s)
x : α
hx : x ∈ ↑(↑(lmapDomain M R (Function.invFunOn f s)) l).support
⊢ x ∈ s
rcases Finset.mem_image.1 (mapDomain_support hx) with ⟨c, hc, rfl⟩
no goals
case refine'_1.intro.intro
α : Type u_1
M : Type u_2
N : Type ?u.245586
P : Type ?u.245589
R : Type u_4
S : Type ?u.245595
inst✝⁸ : Semiring R
inst✝⁷ : Semiring S
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
inst✝⁴ : AddCommMonoid N
inst✝³ : Module R N
inst✝² : AddCommMonoid P
inst✝¹ : Module R P
α' : Type u_3
α'' : Type ?u.245690
inst✝ : Nonempty α
f : α → α'
s : Set α
inhabited_h : Inhabited α
l : α' →₀ M
hl : l ∈ supported M R (f '' s)
c : α'
hc : c ∈ l.support
hx : Function.invFunOn f s c ∈ ↑(↑(lmapDomain M R (Function.invFunOn f s)) l).support
⊢ Function.invFunOn f s c ∈ s
exact Function.invFunOn_mem (by simpa using hl hc)
no goals
α : Type u_1
M : Type u_2
N : Type ?u.245586
P : Type ?u.245589
R : Type u_4
S : Type ?u.245595
inst✝⁸ : Semiring R
inst✝⁷ : Semiring S
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
inst✝⁴ : AddCommMonoid N
inst✝³ : Module R N
inst✝² : AddCommMonoid P
inst✝¹ : Module R P
α' : Type u_3
α'' : Type ?u.245690
inst✝ : Nonempty α
f : α → α'
s : Set α
inhabited_h : Inhabited α
l : α' →₀ M
hl : l ∈ supported M R (f '' s)
c : α'
hc : c ∈ l.support
hx : Function.invFunOn f s c ∈ ↑(↑(lmapDomain M R (Function.invFunOn f s)) l).support
⊢ ∃ a, a ∈ s ∧ f a = c
simpa using hl hc
case refine'_2
α : Type u_1
M : Type u_2
N : Type ?u.245586
P : Type ?u.245589
R : Type u_4
S : Type ?u.245595
inst✝⁸ : Semiring R
inst✝⁷ : Semiring S
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
inst✝⁴ : AddCommMonoid N
inst✝³ : Module R N
inst✝² : AddCommMonoid P
inst✝¹ : Module R P
α' : Type u_3
α'' : Type ?u.245690
inst✝ : Nonempty α
f : α → α'
s : Set α
inhabited_h : Inhabited α
l : α' →₀ M
hl : l ∈ supported M R (f '' s)
⊢ ↑(lmapDomain M R (f ∘ Function.invFunOn f s)) l = l
case refine'_2
α : Type u_1
M : Type u_2
N : Type ?u.245586
P : Type ?u.245589
R : Type u_4
S : Type ?u.245595
inst✝⁸ : Semiring R
inst✝⁷ : Semiring S
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
inst✝⁴ : AddCommMonoid N
inst✝³ : Module R N
inst✝² : AddCommMonoid P
inst✝¹ : Module R P
α' : Type u_3
α'' : Type ?u.245690
inst✝ : Nonempty α
f : α → α'
s : Set α
inhabited_h : Inhabited α
l : α' →₀ M
hl : l ∈ supported M R (f '' s)
⊢ ↑(lmapDomain M R f) (↑(lmapDomain M R (Function.invFunOn f s)) l) = l
rw [← LinearMap.comp_apply, ← lmapDomain_comp]
case refine'_2
α : Type u_1
M : Type u_2
N : Type ?u.245586
P : Type ?u.245589
R : Type u_4
S : Type ?u.245595
inst✝⁸ : Semiring R
inst✝⁷ : Semiring S
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
inst✝⁴ : AddCommMonoid N
inst✝³ : Module R N
inst✝² : AddCommMonoid P
inst✝¹ : Module R P
α' : Type u_3
α'' : Type ?u.245690
inst✝ : Nonempty α
f : α → α'
s : Set α
inhabited_h : Inhabited α
l : α' →₀ M
hl : l ∈ supported M R (f '' s)
c : α'
hc : c ∈ l.support
⊢ (f ∘ Function.invFunOn f s) c = _root_.id c
case refine'_2
α : Type u_1
M : Type u_2
N : Type ?u.245586
P : Type ?u.245589
R : Type u_4
S : Type ?u.245595
inst✝⁸ : Semiring R
inst✝⁷ : Semiring S
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
inst✝⁴ : AddCommMonoid N
inst✝³ : Module R N
inst✝² : AddCommMonoid P
inst✝¹ : Module R P
α' : Type u_3
α'' : Type ?u.245690
inst✝ : Nonempty α
f : α → α'
s : Set α
inhabited_h : Inhabited α
l : α' →₀ M
hl : l ∈ supported M R (f '' s)
⊢ ↑(lmapDomain M R (f ∘ Function.invFunOn f s)) l = l
refine' (mapDomain_congr fun c hc => _).trans mapDomain_id
no goals
case refine'_2
α : Type u_1
M : Type u_2
N : Type ?u.245586
P : Type ?u.245589
R : Type u_4
S : Type ?u.245595
inst✝⁸ : Semiring R
inst✝⁷ : Semiring S
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
inst✝⁴ : AddCommMonoid N
inst✝³ : Module R N
inst✝² : AddCommMonoid P
inst✝¹ : Module R P
α' : Type u_3
α'' : Type ?u.245690
inst✝ : Nonempty α
f : α → α'
s : Set α
inhabited_h : Inhabited α
l : α' →₀ M
hl : l ∈ supported M R (f '' s)
c : α'
hc : c ∈ l.support
⊢ (f ∘ Function.invFunOn f s) c = _root_.id c
exact Function.invFunOn_eq (by simpa using hl hc)
no goals
α : Type u_1
M : Type u_2
N : Type ?u.245586
P : Type ?u.245589
R : Type u_4
S : Type ?u.245595
inst✝⁸ : Semiring R
inst✝⁷ : Semiring S
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
inst✝⁴ : AddCommMonoid N
inst✝³ : Module R N
inst✝² : AddCommMonoid P
inst✝¹ : Module R P
α' : Type u_3
α'' : Type ?u.245690
inst✝ : Nonempty α
f : α → α'
s : Set α
inhabited_h : Inhabited α
l : α' →₀ M
hl : l ∈ supported M R (f '' s)
c : α'
hc : c ∈ l.support
⊢ ∃ a, a ∈ s ∧ f a = c
simpa using hl hc