Theorem: NonUnitalStarRingHom.map_le_map_of_map_star
File: Mathlib/Algebra/Star/Order.lean

Proof steps:
state_before: R✝ : Type u
F : Type u_1
R : Type u_2
S : Type u_3
inst✝⁷ : NonUnitalSemiring R
inst✝⁶ : PartialOrder R
inst✝⁵ : StarRing R
inst✝⁴ : StarOrderedRing R
inst✝³ : NonUnitalSemiring S
inst✝² : PartialOrder S
inst✝¹ : StarRing S
inst✝ : StarOrderedRing S
f : R →⋆ₙ+* S
x y : R
hxy : x ≤ y
⊢ f x ≤ f y
state_after: R✝ : Type u
F : Type u_1
R : Type u_2
S : Type u_3
inst✝⁷ : NonUnitalSemiring R
inst✝⁶ : PartialOrder R
inst✝⁵ : StarRing R
inst✝⁴ : StarOrderedRing R
inst✝³ : NonUnitalSemiring S
inst✝² : PartialOrder S
inst✝¹ : StarRing S
inst✝ : StarOrderedRing S
f : R →⋆ₙ+* S
x y : R
hxy : ∃ p ∈ AddSubmonoid.closure (range fun s => star s * s), y = x + p
⊢ ∃ p ∈ AddSubmonoid.closure (range fun s => star s * s), f y = f x + p
tactic: rw [StarOrderedRing.le_iff] at hxy ⊢
state_before: R✝ : Type u
F : Type u_1
R : Type u_2
S : Type u_3
inst✝⁷ : NonUnitalSemiring R
inst✝⁶ : PartialOrder R
inst✝⁵ : StarRing R
inst✝⁴ : StarOrderedRing R
inst✝³ : NonUnitalSemiring S
inst✝² : PartialOrder S
inst✝¹ : StarRing S
inst✝ : StarOrderedRing S
f : R →⋆ₙ+* S
x y : R
hxy : ∃ p ∈ AddSubmonoid.closure (range fun s => star s * s), y = x + p
⊢ ∃ p ∈ AddSubmonoid.closure (range fun s => star s * s), f y = f x + p
state_after: case intro.intro
R✝ : Type u
F : Type u_1
R : Type u_2
S : Type u_3
inst✝⁷ : NonUnitalSemiring R
inst✝⁶ : PartialOrder R
inst✝⁵ : StarRing R
inst✝⁴ : StarOrderedRing R
inst✝³ : NonUnitalSemiring S
inst✝² : PartialOrder S
inst✝¹ : StarRing S
inst✝ : StarOrderedRing S
f : R →⋆ₙ+* S
x p : R
hp : p ∈ AddSubmonoid.closure (range fun s => star s * s)
⊢ ∃ p_1 ∈ AddSubmonoid.closure (range fun s => star s * s), f (x + p) = f x + p_1
tactic: obtain ⟨p, hp, rfl⟩ := hxy
state_before: case intro.intro
R✝ : Type u
F : Type u_1
R : Type u_2
S : Type u_3
inst✝⁷ : NonUnitalSemiring R
inst✝⁶ : PartialOrder R
inst✝⁵ : StarRing R
inst✝⁴ : StarOrderedRing R
inst✝³ : NonUnitalSemiring S
inst✝² : PartialOrder S
inst✝¹ : StarRing S
inst✝ : StarOrderedRing S
f : R →⋆ₙ+* S
x p : R
hp : p ∈ AddSubmonoid.closure (range fun s => star s * s)
⊢ ∃ p_1 ∈ AddSubmonoid.closure (range fun s => star s * s), f (x + p) = f x + p_1
state_after: case intro.intro
R✝ : Type u
F : Type u_1
R : Type u_2
S : Type u_3
inst✝⁷ : NonUnitalSemiring R
inst✝⁶ : PartialOrder R
inst✝⁵ : StarRing R
inst✝⁴ : StarOrderedRing R
inst✝³ : NonUnitalSemiring S
inst✝² : PartialOrder S
inst✝¹ : StarRing S
inst✝ : StarOrderedRing S
f : R →⋆ₙ+* S
x p : R
hp : p ∈ AddSubmonoid.closure (range fun s => star s * s)
⊢ f p ∈ AddSubmonoid.closure (range fun s => star s * s)
tactic: refine ⟨f p, ?_, map_add f _ _⟩
state_before: case intro.intro
R✝ : Type u
F : Type u_1
R : Type u_2
S : Type u_3
inst✝⁷ : NonUnitalSemiring R
inst✝⁶ : PartialOrder R
inst✝⁵ : StarRing R
inst✝⁴ : StarOrderedRing R
inst✝³ : NonUnitalSemiring S
inst✝² : PartialOrder S
inst✝¹ : StarRing S
inst✝ : StarOrderedRing S
f : R →⋆ₙ+* S
x p : R
hp : p ∈ AddSubmonoid.closure (range fun s => star s * s)
⊢ f p ∈ AddSubmonoid.closure (range fun s => star s * s)
state_after: case intro.intro
R✝ : Type u
F : Type u_1
R : Type u_2
S : Type u_3
inst✝⁷ : NonUnitalSemiring R
inst✝⁶ : PartialOrder R
inst✝⁵ : StarRing R
inst✝⁴ : StarOrderedRing R
inst✝³ : NonUnitalSemiring S
inst✝² : PartialOrder S
inst✝¹ : StarRing S
inst✝ : StarOrderedRing S
f : R →⋆ₙ+* S
x p : R
hp : p ∈ AddSubmonoid.closure (range fun s => star s * s)
hf : ∀ (r : R), f (star r) = star (f r)
⊢ f p ∈ AddSubmonoid.closure (range fun s => star s * s)
tactic: have hf : ∀ r, f (star r) = star (f r) := map_star _
state_before: case intro.intro
R✝ : Type u
F : Type u_1
R : Type u_2
S : Type u_3
inst✝⁷ : NonUnitalSemiring R
inst✝⁶ : PartialOrder R
inst✝⁵ : StarRing R
inst✝⁴ : StarOrderedRing R
inst✝³ : NonUnitalSemiring S
inst✝² : PartialOrder S
inst✝¹ : StarRing S
inst✝ : StarOrderedRing S
f : R →⋆ₙ+* S
x p : R
hp : p ∈ AddSubmonoid.closure (range fun s => star s * s)
hf : ∀ (r : R), f (star r) = star (f r)
⊢ f p ∈ AddSubmonoid.closure (range fun s => star s * s)
state_after: case intro.intro.mem
R✝ : Type u
F : Type u_1
R : Type u_2
S : Type u_3
inst✝⁷ : NonUnitalSemiring R
inst✝⁶ : PartialOrder R
inst✝⁵ : StarRing R
inst✝⁴ : StarOrderedRing R
inst✝³ : NonUnitalSemiring S
inst✝² : PartialOrder S
inst✝¹ : StarRing S
inst✝ : StarOrderedRing S
f : R →⋆ₙ+* S
x p : R
hf : ∀ (r : R), f (star r) = star (f r)
x✝ : R
h✝ : x✝ ∈ range fun s => star s * s
⊢ f x✝ ∈ AddSubmonoid.closure (range fun s => star s * s)

case intro.intro.one
R✝ : Type u
F : Type u_1
R : Type u_2
S : Type u_3
inst✝⁷ : NonUnitalSemiring R
inst✝⁶ : PartialOrder R
inst✝⁵ : StarRing R
inst✝⁴ : StarOrderedRing R
inst✝³ : NonUnitalSemiring S
inst✝² : PartialOrder S
inst✝¹ : StarRing S
inst✝ : StarOrderedRing S
f : R →⋆ₙ+* S
x p : R
hf : ∀ (r : R), f (star r) = star (f r)
⊢ f 0 ∈ AddSubmonoid.closure (range fun s => star s * s)

case intro.intro.mul
R✝ : Type u
F : Type u_1
R : Type u_2
S : Type u_3
inst✝⁷ : NonUnitalSemiring R
inst✝⁶ : PartialOrder R
inst✝⁵ : StarRing R
inst✝⁴ : StarOrderedRing R
inst✝³ : NonUnitalSemiring S
inst✝² : PartialOrder S
inst✝¹ : StarRing S
inst✝ : StarOrderedRing S
f : R →⋆ₙ+* S
x p : R
hf : ∀ (r : R), f (star r) = star (f r)
x✝ : R
hx✝ : x✝ ∈ AddSubmonoid.closure (range fun s => star s * s)
y✝ : R
hy✝ : y✝ ∈ AddSubmonoid.closure (range fun s => star s * s)
a✝¹ : f x✝ ∈ AddSubmonoid.closure (range fun s => star s * s)
a✝ : f y✝ ∈ AddSubmonoid.closure (range fun s => star s * s)
⊢ f (x✝ + y✝) ∈ AddSubmonoid.closure (range fun s => star s * s)
tactic: induction hp using AddSubmonoid.closure_induction'
state_before: case intro.intro.mem
R✝ : Type u
F : Type u_1
R : Type u_2
S : Type u_3
inst✝⁷ : NonUnitalSemiring R
inst✝⁶ : PartialOrder R
inst✝⁵ : StarRing R
inst✝⁴ : StarOrderedRing R
inst✝³ : NonUnitalSemiring S
inst✝² : PartialOrder S
inst✝¹ : StarRing S
inst✝ : StarOrderedRing S
f : R →⋆ₙ+* S
x p : R
hf : ∀ (r : R), f (star r) = star (f r)
x✝ : R
h✝ : x✝ ∈ range fun s => star s * s
⊢ f x✝ ∈ AddSubmonoid.closure (range fun s => star s * s)

case intro.intro.one
R✝ : Type u
F : Type u_1
R : Type u_2
S : Type u_3
inst✝⁷ : NonUnitalSemiring R
inst✝⁶ : PartialOrder R
inst✝⁵ : StarRing R
inst✝⁴ : StarOrderedRing R
inst✝³ : NonUnitalSemiring S
inst✝² : PartialOrder S
inst✝¹ : StarRing S
inst✝ : StarOrderedRing S
f : R →⋆ₙ+* S
x p : R
hf : ∀ (r : R), f (star r) = star (f r)
⊢ f 0 ∈ AddSubmonoid.closure (range fun s => star s * s)

case intro.intro.mul
R✝ : Type u
F : Type u_1
R : Type u_2
S : Type u_3
inst✝⁷ : NonUnitalSemiring R
inst✝⁶ : PartialOrder R
inst✝⁵ : StarRing R
inst✝⁴ : StarOrderedRing R
inst✝³ : NonUnitalSemiring S
inst✝² : PartialOrder S
inst✝¹ : StarRing S
inst✝ : StarOrderedRing S
f : R →⋆ₙ+* S
x p : R
hf : ∀ (r : R), f (star r) = star (f r)
x✝ : R
hx✝ : x✝ ∈ AddSubmonoid.closure (range fun s => star s * s)
y✝ : R
hy✝ : y✝ ∈ AddSubmonoid.closure (range fun s => star s * s)
a✝¹ : f x✝ ∈ AddSubmonoid.closure (range fun s => star s * s)
a✝ : f y✝ ∈ AddSubmonoid.closure (range fun s => star s * s)
⊢ f (x✝ + y✝) ∈ AddSubmonoid.closure (range fun s => star s * s)
state_after: no goals
tactic: all_goals aesop