Theorem: Algebra.adjoin_inl_union_inr_eq_prod
File: Mathlib/RingTheory/Adjoin/Basic.lean

tactic: apply le_antisymm
state_before: R : Type u
A : Type v
B : Type w
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Semiring B
inst✝¹ : Algebra R A
inst✝ : Algebra R B
s✝ t✝ s : Set A
t : Set B
⊢ adjoin R (↑(LinearMap.inl R A B) '' (s ∪ {1}) ∪ ↑(LinearMap.inr R A B) '' (t ∪ {1})) =
    Subalgebra.prod (adjoin R s) (adjoin R t)

tactic: simp only [adjoin_le_iff, Set.insert_subset, Subalgebra.zero_mem, Subalgebra.one_mem,
  subset_adjoin,Set.union_subset_iff,
  LinearMap.coe_inl, Set.mk_preimage_prod_right, Set.image_subset_iff, SetLike.mem_coe,
  Set.mk_preimage_prod_left, LinearMap.coe_inr, and_self_iff, Set.union_singleton,
  Subalgebra.coe_prod]
state_before: case a
R : Type u
A : Type v
B : Type w
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Semiring B
inst✝¹ : Algebra R A
inst✝ : Algebra R B
s✝ t✝ s : Set A
t : Set B
⊢ adjoin R (↑(LinearMap.inl R A B) '' (s ∪ {1}) ∪ ↑(LinearMap.inr R A B) '' (t ∪ {1})) ≤
    Subalgebra.prod (adjoin R s) (adjoin R t)

tactic: rintro ⟨a, b⟩ ⟨ha, hb⟩
state_before: case a
R : Type u
A : Type v
B : Type w
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Semiring B
inst✝¹ : Algebra R A
inst✝ : Algebra R B
s✝ t✝ s : Set A
t : Set B
⊢ Subalgebra.prod (adjoin R s) (adjoin R t) ≤
    adjoin R (↑(LinearMap.inl R A B) '' (s ∪ {1}) ∪ ↑(LinearMap.inr R A B) '' (t ∪ {1}))

tactic: let P := adjoin R (LinearMap.inl R A B '' (s ∪ {1}) ∪ LinearMap.inr R A B '' (t ∪ {1}))
state_before: case a.mk.intro
R : Type u
A : Type v
B : Type w
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Semiring B
inst✝¹ : Algebra R A
inst✝ : Algebra R B
s✝ t✝ s : Set A
t : Set B
a : A
b : B
ha : (a, b).fst ∈ ↑(adjoin R s)
hb : (a, b).snd ∈ ↑(adjoin R t)
⊢ (a, b) ∈ adjoin R (↑(LinearMap.inl R A B) '' (s ∪ {1}) ∪ ↑(LinearMap.inr R A B) '' (t ∪ {1}))

tactic: have Ha : (a, (0 : B)) ∈ adjoin R (LinearMap.inl R A B '' (s ∪ {1})) :=
  mem_adjoin_of_map_mul R LinearMap.inl_map_mul ha
state_before: case a.mk.intro
R : Type u
A : Type v
B : Type w
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Semiring B
inst✝¹ : Algebra R A
inst✝ : Algebra R B
s✝ t✝ s : Set A
t : Set B
a : A
b : B
ha : (a, b).fst ∈ ↑(adjoin R s)
hb : (a, b).snd ∈ ↑(adjoin R t)
P : Subalgebra R (A × B) := adjoin R (↑(LinearMap.inl R A B) '' (s ∪ {1}) ∪ ↑(LinearMap.inr R A B) '' (t ∪ {1}))
⊢ (a, b) ∈ adjoin R (↑(LinearMap.inl R A B) '' (s ∪ {1}) ∪ ↑(LinearMap.inr R A B) '' (t ∪ {1}))

tactic: have Hb : ((0 : A), b) ∈ adjoin R (LinearMap.inr R A B '' (t ∪ {1})) :=
  mem_adjoin_of_map_mul R LinearMap.inr_map_mul hb
state_before: case a.mk.intro
R : Type u
A : Type v
B : Type w
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Semiring B
inst✝¹ : Algebra R A
inst✝ : Algebra R B
s✝ t✝ s : Set A
t : Set B
a : A
b : B
ha : (a, b).fst ∈ ↑(adjoin R s)
hb : (a, b).snd ∈ ↑(adjoin R t)
P : Subalgebra R (A × B) := adjoin R (↑(LinearMap.inl R A B) '' (s ∪ {1}) ∪ ↑(LinearMap.inr R A B) '' (t ∪ {1}))
Ha : (a, 0) ∈ adjoin R (↑(LinearMap.inl R A B) '' (s ∪ {1}))
⊢ (a, b) ∈ adjoin R (↑(LinearMap.inl R A B) '' (s ∪ {1}) ∪ ↑(LinearMap.inr R A B) '' (t ∪ {1}))

tactic: replace Ha : (a, (0 : B)) ∈ P := adjoin_mono (Set.subset_union_left _ _) Ha
state_before: case a.mk.intro
R : Type u
A : Type v
B : Type w
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Semiring B
inst✝¹ : Algebra R A
inst✝ : Algebra R B
s✝ t✝ s : Set A
t : Set B
a : A
b : B
ha : (a, b).fst ∈ ↑(adjoin R s)
hb : (a, b).snd ∈ ↑(adjoin R t)
P : Subalgebra R (A × B) := adjoin R (↑(LinearMap.inl R A B) '' (s ∪ {1}) ∪ ↑(LinearMap.inr R A B) '' (t ∪ {1}))
Ha : (a, 0) ∈ adjoin R (↑(LinearMap.inl R A B) '' (s ∪ {1}))
Hb : (0, b) ∈ adjoin R (↑(LinearMap.inr R A B) '' (t ∪ {1}))
⊢ (a, b) ∈ adjoin R (↑(LinearMap.inl R A B) '' (s ∪ {1}) ∪ ↑(LinearMap.inr R A B) '' (t ∪ {1}))

tactic: replace Hb : ((0 : A), b) ∈ P := adjoin_mono (Set.subset_union_right _ _) Hb
state_before: case a.mk.intro
R : Type u
A : Type v
B : Type w
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Semiring B
inst✝¹ : Algebra R A
inst✝ : Algebra R B
s✝ t✝ s : Set A
t : Set B
a : A
b : B
ha : (a, b).fst ∈ ↑(adjoin R s)
hb : (a, b).snd ∈ ↑(adjoin R t)
P : Subalgebra R (A × B) := adjoin R (↑(LinearMap.inl R A B) '' (s ∪ {1}) ∪ ↑(LinearMap.inr R A B) '' (t ∪ {1}))
Hb : (0, b) ∈ adjoin R (↑(LinearMap.inr R A B) '' (t ∪ {1}))
Ha : (a, 0) ∈ P
⊢ (a, b) ∈ adjoin R (↑(LinearMap.inl R A B) '' (s ∪ {1}) ∪ ↑(LinearMap.inr R A B) '' (t ∪ {1}))

tactic: simpa using Subalgebra.add_mem _ Ha Hb
state_before: case a.mk.intro
R : Type u
A : Type v
B : Type w
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Semiring B
inst✝¹ : Algebra R A
inst✝ : Algebra R B
s✝ t✝ s : Set A
t : Set B
a : A
b : B
ha : (a, b).fst ∈ ↑(adjoin R s)
hb : (a, b).snd ∈ ↑(adjoin R t)
P : Subalgebra R (A × B) := adjoin R (↑(LinearMap.inl R A B) '' (s ∪ {1}) ∪ ↑(LinearMap.inr R A B) '' (t ∪ {1}))
Ha : (a, 0) ∈ P
Hb : (0, b) ∈ P
⊢ (a, b) ∈ adjoin R (↑(LinearMap.inl R A B) '' (s ∪ {1}) ∪ ↑(LinearMap.inr R A B) '' (t ∪ {1}))