[GOAL]
R : Type u_1
Rₛ : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : CommRing Rₛ
inst✝⁴ : Algebra R Rₛ
S : Submonoid R
hT : IsLocalization S Rₛ
M : Type u_3
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : Module Rₛ M
inst✝ : IsScalarTower R Rₛ M
ι : Type u_4
b : ι → M
hli : LinearIndependent R b
⊢ LinearIndependent Rₛ b
[PROOFSTEP]
rw [linearIndependent_iff'] at hli ⊢
[GOAL]
R : Type u_1
Rₛ : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : CommRing Rₛ
inst✝⁴ : Algebra R Rₛ
S : Submonoid R
hT : IsLocalization S Rₛ
M : Type u_3
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : Module Rₛ M
inst✝ : IsScalarTower R Rₛ M
ι : Type u_4
b : ι → M
hli : ∀ (s : Finset ι) (g : ι → R), ∑ i in s, g i • b i = 0 → ∀ (i : ι), i ∈ s → g i = 0
⊢ ∀ (s : Finset ι) (g : ι → Rₛ), ∑ i in s, g i • b i = 0 → ∀ (i : ι), i ∈ s → g i = 0
[PROOFSTEP]
intro s g hg i hi
[GOAL]
R : Type u_1
Rₛ : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : CommRing Rₛ
inst✝⁴ : Algebra R Rₛ
S : Submonoid R
hT : IsLocalization S Rₛ
M : Type u_3
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : Module Rₛ M
inst✝ : IsScalarTower R Rₛ M
ι : Type u_4
b : ι → M
hli : ∀ (s : Finset ι) (g : ι → R), ∑ i in s, g i • b i = 0 → ∀ (i : ι), i ∈ s → g i = 0
s : Finset ι
g : ι → Rₛ
hg : ∑ i in s, g i • b i = 0
i : ι
hi : i ∈ s
⊢ g i = 0
[PROOFSTEP]
choose! a g' hg' using IsLocalization.exist_integer_multiples S s g
[GOAL]
R : Type u_1
Rₛ : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : CommRing Rₛ
inst✝⁴ : Algebra R Rₛ
S : Submonoid R
hT : IsLocalization S Rₛ
M : Type u_3
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : Module Rₛ M
inst✝ : IsScalarTower R Rₛ M
ι : Type u_4
b : ι → M
hli : ∀ (s : Finset ι) (g : ι → R), ∑ i in s, g i • b i = 0 → ∀ (i : ι), i ∈ s → g i = 0
s : Finset ι
g : ι → Rₛ
hg : ∑ i in s, g i • b i = 0
i : ι
hi : i ∈ s
a : { x // x ∈ S }
g' : ι → R
hg' : ∀ (i : ι), i ∈ s → ↑(algebraMap R Rₛ) (g' i) = ↑a • g i
⊢ g i = 0
[PROOFSTEP]
specialize hli s g' _ i hi
[GOAL]
R : Type u_1
Rₛ : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : CommRing Rₛ
inst✝⁴ : Algebra R Rₛ
S : Submonoid R
hT : IsLocalization S Rₛ
M : Type u_3
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : Module Rₛ M
inst✝ : IsScalarTower R Rₛ M
ι : Type u_4
b : ι → M
hli : ∀ (s : Finset ι) (g : ι → R), ∑ i in s, g i • b i = 0 → ∀ (i : ι), i ∈ s → g i = 0
s : Finset ι
g : ι → Rₛ
hg : ∑ i in s, g i • b i = 0
i : ι
hi : i ∈ s
a : { x // x ∈ S }
g' : ι → R
hg' : ∀ (i : ι), i ∈ s → ↑(algebraMap R Rₛ) (g' i) = ↑a • g i
⊢ ∑ i in s, g' i • b i = 0
[PROOFSTEP]
rw [← @smul_zero _ M _ _ (a : R), ← hg, Finset.smul_sum]
[GOAL]
R : Type u_1
Rₛ : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : CommRing Rₛ
inst✝⁴ : Algebra R Rₛ
S : Submonoid R
hT : IsLocalization S Rₛ
M : Type u_3
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : Module Rₛ M
inst✝ : IsScalarTower R Rₛ M
ι : Type u_4
b : ι → M
hli : ∀ (s : Finset ι) (g : ι → R), ∑ i in s, g i • b i = 0 → ∀ (i : ι), i ∈ s → g i = 0
s : Finset ι
g : ι → Rₛ
hg : ∑ i in s, g i • b i = 0
i : ι
hi : i ∈ s
a : { x // x ∈ S }
g' : ι → R
hg' : ∀ (i : ι), i ∈ s → ↑(algebraMap R Rₛ) (g' i) = ↑a • g i
⊢ ∑ i in s, g' i • b i = ∑ x in s, ↑a • g x • b x
[PROOFSTEP]
refine' Finset.sum_congr rfl fun i hi => _
[GOAL]
R : Type u_1
Rₛ : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : CommRing Rₛ
inst✝⁴ : Algebra R Rₛ
S : Submonoid R
hT : IsLocalization S Rₛ
M : Type u_3
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : Module Rₛ M
inst✝ : IsScalarTower R Rₛ M
ι : Type u_4
b : ι → M
hli : ∀ (s : Finset ι) (g : ι → R), ∑ i in s, g i • b i = 0 → ∀ (i : ι), i ∈ s → g i = 0
s : Finset ι
g : ι → Rₛ
hg : ∑ i in s, g i • b i = 0
i✝ : ι
hi✝ : i✝ ∈ s
a : { x // x ∈ S }
g' : ι → R
hg' : ∀ (i : ι), i ∈ s → ↑(algebraMap R Rₛ) (g' i) = ↑a • g i
i : ι
hi : i ∈ s
⊢ g' i • b i = ↑a • g i • b i
[PROOFSTEP]
rw [← IsScalarTower.algebraMap_smul Rₛ, hg' i hi, smul_assoc]
[GOAL]
R : Type u_1
Rₛ : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : CommRing Rₛ
inst✝⁴ : Algebra R Rₛ
S : Submonoid R
hT : IsLocalization S Rₛ
M : Type u_3
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : Module Rₛ M
inst✝ : IsScalarTower R Rₛ M
ι : Type u_4
b : ι → M
s : Finset ι
g : ι → Rₛ
hg : ∑ i in s, g i • b i = 0
i : ι
hi : i ∈ s
a : { x // x ∈ S }
g' : ι → R
hg' : ∀ (i : ι), i ∈ s → ↑(algebraMap R Rₛ) (g' i) = ↑a • g i
hli : g' i = 0
⊢ g i = 0
[PROOFSTEP]
refine' (IsLocalization.map_units Rₛ a).mul_right_eq_zero.mp _
[GOAL]
R : Type u_1
Rₛ : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : CommRing Rₛ
inst✝⁴ : Algebra R Rₛ
S : Submonoid R
hT : IsLocalization S Rₛ
M : Type u_3
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : Module Rₛ M
inst✝ : IsScalarTower R Rₛ M
ι : Type u_4
b : ι → M
s : Finset ι
g : ι → Rₛ
hg : ∑ i in s, g i • b i = 0
i : ι
hi : i ∈ s
a : { x // x ∈ S }
g' : ι → R
hg' : ∀ (i : ι), i ∈ s → ↑(algebraMap R Rₛ) (g' i) = ↑a • g i
hli : g' i = 0
⊢ ↑(algebraMap R Rₛ) ↑a * g i = 0
[PROOFSTEP]
rw [← Algebra.smul_def, ← map_zero (algebraMap R Rₛ), ← hli, hg' i hi]
[GOAL]
R : Type u_1
Rₛ : Type u_2
inst✝¹⁰ : CommRing R
inst✝⁹ : CommRing Rₛ
inst✝⁸ : Algebra R Rₛ
S : Submonoid R
hT : IsLocalization S Rₛ
A : Type u_3
inst✝⁷ : CommRing A
inst✝⁶ : Algebra R A
Aₛ : Type u_4
inst✝⁵ : CommRing Aₛ
inst✝⁴ : Algebra A Aₛ
inst✝³ : Algebra Rₛ Aₛ
inst✝² : Algebra R Aₛ
inst✝¹ : IsScalarTower R Rₛ Aₛ
inst✝ : IsScalarTower R A Aₛ
hA : IsLocalization (Algebra.algebraMapSubmonoid A S) Aₛ
ι : Type u_5
v : ι → A
hv : LinearIndependent R v
⊢ LinearIndependent Rₛ (↑(algebraMap A Aₛ) ∘ v)
[PROOFSTEP]
rw [linearIndependent_iff'] at hv ⊢
[GOAL]
R : Type u_1
Rₛ : Type u_2
inst✝¹⁰ : CommRing R
inst✝⁹ : CommRing Rₛ
inst✝⁸ : Algebra R Rₛ
S : Submonoid R
hT : IsLocalization S Rₛ
A : Type u_3
inst✝⁷ : CommRing A
inst✝⁶ : Algebra R A
Aₛ : Type u_4
inst✝⁵ : CommRing Aₛ
inst✝⁴ : Algebra A Aₛ
inst✝³ : Algebra Rₛ Aₛ
inst✝² : Algebra R Aₛ
inst✝¹ : IsScalarTower R Rₛ Aₛ
inst✝ : IsScalarTower R A Aₛ
hA : IsLocalization (Algebra.algebraMapSubmonoid A S) Aₛ
ι : Type u_5
v : ι → A
hv : ∀ (s : Finset ι) (g : ι → R), ∑ i in s, g i • v i = 0 → ∀ (i : ι), i ∈ s → g i = 0
⊢ ∀ (s : Finset ι) (g : ι → Rₛ), ∑ i in s, g i • (↑(algebraMap A Aₛ) ∘ v) i = 0 → ∀ (i : ι), i ∈ s → g i = 0
[PROOFSTEP]
intro s g hg i hi
[GOAL]
R : Type u_1
Rₛ : Type u_2
inst✝¹⁰ : CommRing R
inst✝⁹ : CommRing Rₛ
inst✝⁸ : Algebra R Rₛ
S : Submonoid R
hT : IsLocalization S Rₛ
A : Type u_3
inst✝⁷ : CommRing A
inst✝⁶ : Algebra R A
Aₛ : Type u_4
inst✝⁵ : CommRing Aₛ
inst✝⁴ : Algebra A Aₛ
inst✝³ : Algebra Rₛ Aₛ
inst✝² : Algebra R Aₛ
inst✝¹ : IsScalarTower R Rₛ Aₛ
inst✝ : IsScalarTower R A Aₛ
hA : IsLocalization (Algebra.algebraMapSubmonoid A S) Aₛ
ι : Type u_5
v : ι → A
hv : ∀ (s : Finset ι) (g : ι → R), ∑ i in s, g i • v i = 0 → ∀ (i : ι), i ∈ s → g i = 0
s : Finset ι
g : ι → Rₛ
hg : ∑ i in s, g i • (↑(algebraMap A Aₛ) ∘ v) i = 0
i : ι
hi : i ∈ s
⊢ g i = 0
[PROOFSTEP]
choose! a g' hg' using IsLocalization.exist_integer_multiples S s g
[GOAL]
R : Type u_1
Rₛ : Type u_2
inst✝¹⁰ : CommRing R
inst✝⁹ : CommRing Rₛ
inst✝⁸ : Algebra R Rₛ
S : Submonoid R
hT : IsLocalization S Rₛ
A : Type u_3
inst✝⁷ : CommRing A
inst✝⁶ : Algebra R A
Aₛ : Type u_4
inst✝⁵ : CommRing Aₛ
inst✝⁴ : Algebra A Aₛ
inst✝³ : Algebra Rₛ Aₛ
inst✝² : Algebra R Aₛ
inst✝¹ : IsScalarTower R Rₛ Aₛ
inst✝ : IsScalarTower R A Aₛ
hA : IsLocalization (Algebra.algebraMapSubmonoid A S) Aₛ
ι : Type u_5
v : ι → A
hv : ∀ (s : Finset ι) (g : ι → R), ∑ i in s, g i • v i = 0 → ∀ (i : ι), i ∈ s → g i = 0
s : Finset ι
g : ι → Rₛ
hg : ∑ i in s, g i • (↑(algebraMap A Aₛ) ∘ v) i = 0
i : ι
hi : i ∈ s
a : { x // x ∈ S }
g' : ι → R
hg' : ∀ (i : ι), i ∈ s → ↑(algebraMap R Rₛ) (g' i) = ↑a • g i
⊢ g i = 0
[PROOFSTEP]
have h0 : algebraMap A Aₛ (∑ i in s, g' i • v i) = 0 :=
  by
  apply_fun (· • ·) (a : R) at hg
  rw [smul_zero, Finset.smul_sum] at hg
  rw [map_sum, ← hg]
  refine' Finset.sum_congr rfl fun i hi => _
  rw [← smul_assoc, ← hg' i hi, Algebra.smul_def, map_mul, ← IsScalarTower.algebraMap_apply, ← Algebra.smul_def,
    algebraMap_smul, Function.comp_apply]
[GOAL]
R : Type u_1
Rₛ : Type u_2
inst✝¹⁰ : CommRing R
inst✝⁹ : CommRing Rₛ
inst✝⁸ : Algebra R Rₛ
S : Submonoid R
hT : IsLocalization S Rₛ
A : Type u_3
inst✝⁷ : CommRing A
inst✝⁶ : Algebra R A
Aₛ : Type u_4
inst✝⁵ : CommRing Aₛ
inst✝⁴ : Algebra A Aₛ
inst✝³ : Algebra Rₛ Aₛ
inst✝² : Algebra R Aₛ
inst✝¹ : IsScalarTower R Rₛ Aₛ
inst✝ : IsScalarTower R A Aₛ
hA : IsLocalization (Algebra.algebraMapSubmonoid A S) Aₛ
ι : Type u_5
v : ι → A
hv : ∀ (s : Finset ι) (g : ι → R), ∑ i in s, g i • v i = 0 → ∀ (i : ι), i ∈ s → g i = 0
s : Finset ι
g : ι → Rₛ
hg : ∑ i in s, g i • (↑(algebraMap A Aₛ) ∘ v) i = 0
i : ι
hi : i ∈ s
a : { x // x ∈ S }
g' : ι → R
hg' : ∀ (i : ι), i ∈ s → ↑(algebraMap R Rₛ) (g' i) = ↑a • g i
⊢ ↑(algebraMap A Aₛ) (∑ i in s, g' i • v i) = 0
[PROOFSTEP]
apply_fun (· • ·) (a : R) at hg
[GOAL]
R : Type u_1
Rₛ : Type u_2
inst✝¹⁰ : CommRing R
inst✝⁹ : CommRing Rₛ
inst✝⁸ : Algebra R Rₛ
S : Submonoid R
hT : IsLocalization S Rₛ
A : Type u_3
inst✝⁷ : CommRing A
inst✝⁶ : Algebra R A
Aₛ : Type u_4
inst✝⁵ : CommRing Aₛ
inst✝⁴ : Algebra A Aₛ
inst✝³ : Algebra Rₛ Aₛ
inst✝² : Algebra R Aₛ
inst✝¹ : IsScalarTower R Rₛ Aₛ
inst✝ : IsScalarTower R A Aₛ
hA : IsLocalization (Algebra.algebraMapSubmonoid A S) Aₛ
ι : Type u_5
v : ι → A
hv : ∀ (s : Finset ι) (g : ι → R), ∑ i in s, g i • v i = 0 → ∀ (i : ι), i ∈ s → g i = 0
s : Finset ι
g : ι → Rₛ
i : ι
hi : i ∈ s
a : { x // x ∈ S }
g' : ι → R
hg' : ∀ (i : ι), i ∈ s → ↑(algebraMap R Rₛ) (g' i) = ↑a • g i
hg : ↑a • ∑ i in s, g i • (↑(algebraMap A Aₛ) ∘ v) i = ↑a • 0
⊢ ↑(algebraMap A Aₛ) (∑ i in s, g' i • v i) = 0
[PROOFSTEP]
rw [smul_zero, Finset.smul_sum] at hg
[GOAL]
R : Type u_1
Rₛ : Type u_2
inst✝¹⁰ : CommRing R
inst✝⁹ : CommRing Rₛ
inst✝⁸ : Algebra R Rₛ
S : Submonoid R
hT : IsLocalization S Rₛ
A : Type u_3
inst✝⁷ : CommRing A
inst✝⁶ : Algebra R A
Aₛ : Type u_4
inst✝⁵ : CommRing Aₛ
inst✝⁴ : Algebra A Aₛ
inst✝³ : Algebra Rₛ Aₛ
inst✝² : Algebra R Aₛ
inst✝¹ : IsScalarTower R Rₛ Aₛ
inst✝ : IsScalarTower R A Aₛ
hA : IsLocalization (Algebra.algebraMapSubmonoid A S) Aₛ
ι : Type u_5
v : ι → A
hv : ∀ (s : Finset ι) (g : ι → R), ∑ i in s, g i • v i = 0 → ∀ (i : ι), i ∈ s → g i = 0
s : Finset ι
g : ι → Rₛ
i : ι
hi : i ∈ s
a : { x // x ∈ S }
g' : ι → R
hg' : ∀ (i : ι), i ∈ s → ↑(algebraMap R Rₛ) (g' i) = ↑a • g i
hg : ∑ x in s, ↑a • g x • (↑(algebraMap A Aₛ) ∘ v) x = 0
⊢ ↑(algebraMap A Aₛ) (∑ i in s, g' i • v i) = 0
[PROOFSTEP]
rw [map_sum, ← hg]
[GOAL]
R : Type u_1
Rₛ : Type u_2
inst✝¹⁰ : CommRing R
inst✝⁹ : CommRing Rₛ
inst✝⁸ : Algebra R Rₛ
S : Submonoid R
hT : IsLocalization S Rₛ
A : Type u_3
inst✝⁷ : CommRing A
inst✝⁶ : Algebra R A
Aₛ : Type u_4
inst✝⁵ : CommRing Aₛ
inst✝⁴ : Algebra A Aₛ
inst✝³ : Algebra Rₛ Aₛ
inst✝² : Algebra R Aₛ
inst✝¹ : IsScalarTower R Rₛ Aₛ
inst✝ : IsScalarTower R A Aₛ
hA : IsLocalization (Algebra.algebraMapSubmonoid A S) Aₛ
ι : Type u_5
v : ι → A
hv : ∀ (s : Finset ι) (g : ι → R), ∑ i in s, g i • v i = 0 → ∀ (i : ι), i ∈ s → g i = 0
s : Finset ι
g : ι → Rₛ
i : ι
hi : i ∈ s
a : { x // x ∈ S }
g' : ι → R
hg' : ∀ (i : ι), i ∈ s → ↑(algebraMap R Rₛ) (g' i) = ↑a • g i
hg : ∑ x in s, ↑a • g x • (↑(algebraMap A Aₛ) ∘ v) x = 0
⊢ ∑ x in s, ↑(algebraMap A Aₛ) (g' x • v x) = ∑ x in s, ↑a • g x • (↑(algebraMap A Aₛ) ∘ v) x
[PROOFSTEP]
refine' Finset.sum_congr rfl fun i hi => _
[GOAL]
R : Type u_1
Rₛ : Type u_2
inst✝¹⁰ : CommRing R
inst✝⁹ : CommRing Rₛ
inst✝⁸ : Algebra R Rₛ
S : Submonoid R
hT : IsLocalization S Rₛ
A : Type u_3
inst✝⁷ : CommRing A
inst✝⁶ : Algebra R A
Aₛ : Type u_4
inst✝⁵ : CommRing Aₛ
inst✝⁴ : Algebra A Aₛ
inst✝³ : Algebra Rₛ Aₛ
inst✝² : Algebra R Aₛ
inst✝¹ : IsScalarTower R Rₛ Aₛ
inst✝ : IsScalarTower R A Aₛ
hA : IsLocalization (Algebra.algebraMapSubmonoid A S) Aₛ
ι : Type u_5
v : ι → A
hv : ∀ (s : Finset ι) (g : ι → R), ∑ i in s, g i • v i = 0 → ∀ (i : ι), i ∈ s → g i = 0
s : Finset ι
g : ι → Rₛ
i✝ : ι
hi✝ : i✝ ∈ s
a : { x // x ∈ S }
g' : ι → R
hg' : ∀ (i : ι), i ∈ s → ↑(algebraMap R Rₛ) (g' i) = ↑a • g i
hg : ∑ x in s, ↑a • g x • (↑(algebraMap A Aₛ) ∘ v) x = 0
i : ι
hi : i ∈ s
⊢ ↑(algebraMap A Aₛ) (g' i • v i) = ↑a • g i • (↑(algebraMap A Aₛ) ∘ v) i
[PROOFSTEP]
rw [← smul_assoc, ← hg' i hi, Algebra.smul_def, map_mul, ← IsScalarTower.algebraMap_apply, ← Algebra.smul_def,
  algebraMap_smul, Function.comp_apply]
[GOAL]
R : Type u_1
Rₛ : Type u_2
inst✝¹⁰ : CommRing R
inst✝⁹ : CommRing Rₛ
inst✝⁸ : Algebra R Rₛ
S : Submonoid R
hT : IsLocalization S Rₛ
A : Type u_3
inst✝⁷ : CommRing A
inst✝⁶ : Algebra R A
Aₛ : Type u_4
inst✝⁵ : CommRing Aₛ
inst✝⁴ : Algebra A Aₛ
inst✝³ : Algebra Rₛ Aₛ
inst✝² : Algebra R Aₛ
inst✝¹ : IsScalarTower R Rₛ Aₛ
inst✝ : IsScalarTower R A Aₛ
hA : IsLocalization (Algebra.algebraMapSubmonoid A S) Aₛ
ι : Type u_5
v : ι → A
hv : ∀ (s : Finset ι) (g : ι → R), ∑ i in s, g i • v i = 0 → ∀ (i : ι), i ∈ s → g i = 0
s : Finset ι
g : ι → Rₛ
hg : ∑ i in s, g i • (↑(algebraMap A Aₛ) ∘ v) i = 0
i : ι
hi : i ∈ s
a : { x // x ∈ S }
g' : ι → R
hg' : ∀ (i : ι), i ∈ s → ↑(algebraMap R Rₛ) (g' i) = ↑a • g i
h0 : ↑(algebraMap A Aₛ) (∑ i in s, g' i • v i) = 0
⊢ g i = 0
[PROOFSTEP]
obtain ⟨⟨_, r, hrS, rfl⟩, hr : algebraMap R A r * _ = 0⟩ :=
  (IsLocalization.map_eq_zero_iff (Algebra.algebraMapSubmonoid A S) _ _).1 h0
[GOAL]
case intro.mk.intro.intro
R : Type u_1
Rₛ : Type u_2
inst✝¹⁰ : CommRing R
inst✝⁹ : CommRing Rₛ
inst✝⁸ : Algebra R Rₛ
S : Submonoid R
hT : IsLocalization S Rₛ
A : Type u_3
inst✝⁷ : CommRing A
inst✝⁶ : Algebra R A
Aₛ : Type u_4
inst✝⁵ : CommRing Aₛ
inst✝⁴ : Algebra A Aₛ
inst✝³ : Algebra Rₛ Aₛ
inst✝² : Algebra R Aₛ
inst✝¹ : IsScalarTower R Rₛ Aₛ
inst✝ : IsScalarTower R A Aₛ
hA : IsLocalization (Algebra.algebraMapSubmonoid A S) Aₛ
ι : Type u_5
v : ι → A
hv : ∀ (s : Finset ι) (g : ι → R), ∑ i in s, g i • v i = 0 → ∀ (i : ι), i ∈ s → g i = 0
s : Finset ι
g : ι → Rₛ
hg : ∑ i in s, g i • (↑(algebraMap A Aₛ) ∘ v) i = 0
i : ι
hi : i ∈ s
a : { x // x ∈ S }
g' : ι → R
hg' : ∀ (i : ι), i ∈ s → ↑(algebraMap R Rₛ) (g' i) = ↑a • g i
h0 : ↑(algebraMap A Aₛ) (∑ i in s, g' i • v i) = 0
r : R
hrS : r ∈ ↑S
hr : ↑(algebraMap R A) r * ∑ i in s, g' i • v i = 0
⊢ g i = 0
[PROOFSTEP]
simp_rw [Finset.mul_sum, ← Algebra.smul_def, smul_smul] at hr
[GOAL]
case intro.mk.intro.intro
R : Type u_1
Rₛ : Type u_2
inst✝¹⁰ : CommRing R
inst✝⁹ : CommRing Rₛ
inst✝⁸ : Algebra R Rₛ
S : Submonoid R
hT : IsLocalization S Rₛ
A : Type u_3
inst✝⁷ : CommRing A
inst✝⁶ : Algebra R A
Aₛ : Type u_4
inst✝⁵ : CommRing Aₛ
inst✝⁴ : Algebra A Aₛ
inst✝³ : Algebra Rₛ Aₛ
inst✝² : Algebra R Aₛ
inst✝¹ : IsScalarTower R Rₛ Aₛ
inst✝ : IsScalarTower R A Aₛ
hA : IsLocalization (Algebra.algebraMapSubmonoid A S) Aₛ
ι : Type u_5
v : ι → A
hv : ∀ (s : Finset ι) (g : ι → R), ∑ i in s, g i • v i = 0 → ∀ (i : ι), i ∈ s → g i = 0
s : Finset ι
g : ι → Rₛ
hg : ∑ i in s, g i • (↑(algebraMap A Aₛ) ∘ v) i = 0
i : ι
hi : i ∈ s
a : { x // x ∈ S }
g' : ι → R
hg' : ∀ (i : ι), i ∈ s → ↑(algebraMap R Rₛ) (g' i) = ↑a • g i
h0 : ↑(algebraMap A Aₛ) (∑ i in s, g' i • v i) = 0
r : R
hrS : r ∈ ↑S
hr : ∑ x in s, (r * g' x) • v x = 0
⊢ g i = 0
[PROOFSTEP]
specialize hv s _ hr i hi
[GOAL]
case intro.mk.intro.intro
R : Type u_1
Rₛ : Type u_2
inst✝¹⁰ : CommRing R
inst✝⁹ : CommRing Rₛ
inst✝⁸ : Algebra R Rₛ
S : Submonoid R
hT : IsLocalization S Rₛ
A : Type u_3
inst✝⁷ : CommRing A
inst✝⁶ : Algebra R A
Aₛ : Type u_4
inst✝⁵ : CommRing Aₛ
inst✝⁴ : Algebra A Aₛ
inst✝³ : Algebra Rₛ Aₛ
inst✝² : Algebra R Aₛ
inst✝¹ : IsScalarTower R Rₛ Aₛ
inst✝ : IsScalarTower R A Aₛ
hA : IsLocalization (Algebra.algebraMapSubmonoid A S) Aₛ
ι : Type u_5
v : ι → A
s : Finset ι
g : ι → Rₛ
hg : ∑ i in s, g i • (↑(algebraMap A Aₛ) ∘ v) i = 0
i : ι
hi : i ∈ s
a : { x // x ∈ S }
g' : ι → R
hg' : ∀ (i : ι), i ∈ s → ↑(algebraMap R Rₛ) (g' i) = ↑a • g i
h0 : ↑(algebraMap A Aₛ) (∑ i in s, g' i • v i) = 0
r : R
hrS : r ∈ ↑S
hr : ∑ x in s, (r * g' x) • v x = 0
hv : r * g' i = 0
⊢ g i = 0
[PROOFSTEP]
rw [← (IsLocalization.map_units Rₛ a).mul_right_eq_zero, ← Algebra.smul_def, ← hg' i hi]
[GOAL]
case intro.mk.intro.intro
R : Type u_1
Rₛ : Type u_2
inst✝¹⁰ : CommRing R
inst✝⁹ : CommRing Rₛ
inst✝⁸ : Algebra R Rₛ
S : Submonoid R
hT : IsLocalization S Rₛ
A : Type u_3
inst✝⁷ : CommRing A
inst✝⁶ : Algebra R A
Aₛ : Type u_4
inst✝⁵ : CommRing Aₛ
inst✝⁴ : Algebra A Aₛ
inst✝³ : Algebra Rₛ Aₛ
inst✝² : Algebra R Aₛ
inst✝¹ : IsScalarTower R Rₛ Aₛ
inst✝ : IsScalarTower R A Aₛ
hA : IsLocalization (Algebra.algebraMapSubmonoid A S) Aₛ
ι : Type u_5
v : ι → A
s : Finset ι
g : ι → Rₛ
hg : ∑ i in s, g i • (↑(algebraMap A Aₛ) ∘ v) i = 0
i : ι
hi : i ∈ s
a : { x // x ∈ S }
g' : ι → R
hg' : ∀ (i : ι), i ∈ s → ↑(algebraMap R Rₛ) (g' i) = ↑a • g i
h0 : ↑(algebraMap A Aₛ) (∑ i in s, g' i • v i) = 0
r : R
hrS : r ∈ ↑S
hr : ∑ x in s, (r * g' x) • v x = 0
hv : r * g' i = 0
⊢ ↑(algebraMap R Rₛ) (g' i) = 0
[PROOFSTEP]
exact (IsLocalization.map_eq_zero_iff S _ _).2 ⟨⟨r, hrS⟩, hv⟩
[GOAL]
R : Type u_1
Rₛ : Type u_2
inst✝¹⁰ : CommRing R
inst✝⁹ : CommRing Rₛ
inst✝⁸ : Algebra R Rₛ
S : Submonoid R
hT : IsLocalization S Rₛ
A : Type u_3
inst✝⁷ : CommRing A
inst✝⁶ : Algebra R A
Aₛ : Type u_4
inst✝⁵ : CommRing Aₛ
inst✝⁴ : Algebra A Aₛ
inst✝³ : Algebra Rₛ Aₛ
inst✝² : Algebra R Aₛ
inst✝¹ : IsScalarTower R Rₛ Aₛ
inst✝ : IsScalarTower R A Aₛ
hA : IsLocalization (Algebra.algebraMapSubmonoid A S) Aₛ
v : Set A
hv : span R v = ⊤
⊢ span Rₛ (↑(algebraMap A Aₛ) '' v) = ⊤
[PROOFSTEP]
rw [eq_top_iff]
[GOAL]
R : Type u_1
Rₛ : Type u_2
inst✝¹⁰ : CommRing R
inst✝⁹ : CommRing Rₛ
inst✝⁸ : Algebra R Rₛ
S : Submonoid R
hT : IsLocalization S Rₛ
A : Type u_3
inst✝⁷ : CommRing A
inst✝⁶ : Algebra R A
Aₛ : Type u_4
inst✝⁵ : CommRing Aₛ
inst✝⁴ : Algebra A Aₛ
inst✝³ : Algebra Rₛ Aₛ
inst✝² : Algebra R Aₛ
inst✝¹ : IsScalarTower R Rₛ Aₛ
inst✝ : IsScalarTower R A Aₛ
hA : IsLocalization (Algebra.algebraMapSubmonoid A S) Aₛ
v : Set A
hv : span R v = ⊤
⊢ ⊤ ≤ span Rₛ (↑(algebraMap A Aₛ) '' v)
[PROOFSTEP]
rintro a' -
[GOAL]
R : Type u_1
Rₛ : Type u_2
inst✝¹⁰ : CommRing R
inst✝⁹ : CommRing Rₛ
inst✝⁸ : Algebra R Rₛ
S : Submonoid R
hT : IsLocalization S Rₛ
A : Type u_3
inst✝⁷ : CommRing A
inst✝⁶ : Algebra R A
Aₛ : Type u_4
inst✝⁵ : CommRing Aₛ
inst✝⁴ : Algebra A Aₛ
inst✝³ : Algebra Rₛ Aₛ
inst✝² : Algebra R Aₛ
inst✝¹ : IsScalarTower R Rₛ Aₛ
inst✝ : IsScalarTower R A Aₛ
hA : IsLocalization (Algebra.algebraMapSubmonoid A S) Aₛ
v : Set A
hv : span R v = ⊤
a' : Aₛ
⊢ a' ∈ span Rₛ (↑(algebraMap A Aₛ) '' v)
[PROOFSTEP]
obtain ⟨a, ⟨_, s, hs, rfl⟩, rfl⟩ := IsLocalization.mk'_surjective (Algebra.algebraMapSubmonoid A S) a'
[GOAL]
case intro.intro.mk.intro.intro
R : Type u_1
Rₛ : Type u_2
inst✝¹⁰ : CommRing R
inst✝⁹ : CommRing Rₛ
inst✝⁸ : Algebra R Rₛ
S : Submonoid R
hT : IsLocalization S Rₛ
A : Type u_3
inst✝⁷ : CommRing A
inst✝⁶ : Algebra R A
Aₛ : Type u_4
inst✝⁵ : CommRing Aₛ
inst✝⁴ : Algebra A Aₛ
inst✝³ : Algebra Rₛ Aₛ
inst✝² : Algebra R Aₛ
inst✝¹ : IsScalarTower R Rₛ Aₛ
inst✝ : IsScalarTower R A Aₛ
hA : IsLocalization (Algebra.algebraMapSubmonoid A S) Aₛ
v : Set A
hv : span R v = ⊤
a : A
s : R
hs : s ∈ ↑S
⊢ IsLocalization.mk' Aₛ a
      { val := ↑(algebraMap R A) s, property := (_ : ∃ a, a ∈ ↑S ∧ ↑(algebraMap R A) a = ↑(algebraMap R A) s) } ∈
    span Rₛ (↑(algebraMap A Aₛ) '' v)
[PROOFSTEP]
rw [IsLocalization.mk'_eq_mul_mk'_one, mul_comm, ← map_one (algebraMap R A)]
[GOAL]
case intro.intro.mk.intro.intro
R : Type u_1
Rₛ : Type u_2
inst✝¹⁰ : CommRing R
inst✝⁹ : CommRing Rₛ
inst✝⁸ : Algebra R Rₛ
S : Submonoid R
hT : IsLocalization S Rₛ
A : Type u_3
inst✝⁷ : CommRing A
inst✝⁶ : Algebra R A
Aₛ : Type u_4
inst✝⁵ : CommRing Aₛ
inst✝⁴ : Algebra A Aₛ
inst✝³ : Algebra Rₛ Aₛ
inst✝² : Algebra R Aₛ
inst✝¹ : IsScalarTower R Rₛ Aₛ
inst✝ : IsScalarTower R A Aₛ
hA : IsLocalization (Algebra.algebraMapSubmonoid A S) Aₛ
v : Set A
hv : span R v = ⊤
a : A
s : R
hs : s ∈ ↑S
⊢ IsLocalization.mk' Aₛ (↑(algebraMap R A) 1)
        { val := ↑(algebraMap R A) s, property := (_ : ∃ a, a ∈ ↑S ∧ ↑(algebraMap R A) a = ↑(algebraMap R A) s) } *
      ↑(algebraMap A Aₛ) a ∈
    span Rₛ (↑(algebraMap A Aₛ) '' v)
[PROOFSTEP]
erw [← IsLocalization.algebraMap_mk' A Rₛ Aₛ (1 : R) ⟨s, hs⟩]
  -- `erw` needed to unify `⟨s, hs⟩`
[GOAL]
case intro.intro.mk.intro.intro
R : Type u_1
Rₛ : Type u_2
inst✝¹⁰ : CommRing R
inst✝⁹ : CommRing Rₛ
inst✝⁸ : Algebra R Rₛ
S : Submonoid R
hT : IsLocalization S Rₛ
A : Type u_3
inst✝⁷ : CommRing A
inst✝⁶ : Algebra R A
Aₛ : Type u_4
inst✝⁵ : CommRing Aₛ
inst✝⁴ : Algebra A Aₛ
inst✝³ : Algebra Rₛ Aₛ
inst✝² : Algebra R Aₛ
inst✝¹ : IsScalarTower R Rₛ Aₛ
inst✝ : IsScalarTower R A Aₛ
hA : IsLocalization (Algebra.algebraMapSubmonoid A S) Aₛ
v : Set A
hv : span R v = ⊤
a : A
s : R
hs : s ∈ ↑S
⊢ ↑(algebraMap Rₛ Aₛ) (IsLocalization.mk' Rₛ 1 { val := s, property := hs }) * ↑(algebraMap A Aₛ) a ∈
    span Rₛ (↑(algebraMap A Aₛ) '' v)
[PROOFSTEP]
rw [← Algebra.smul_def]
[GOAL]
case intro.intro.mk.intro.intro
R : Type u_1
Rₛ : Type u_2
inst✝¹⁰ : CommRing R
inst✝⁹ : CommRing Rₛ
inst✝⁸ : Algebra R Rₛ
S : Submonoid R
hT : IsLocalization S Rₛ
A : Type u_3
inst✝⁷ : CommRing A
inst✝⁶ : Algebra R A
Aₛ : Type u_4
inst✝⁵ : CommRing Aₛ
inst✝⁴ : Algebra A Aₛ
inst✝³ : Algebra Rₛ Aₛ
inst✝² : Algebra R Aₛ
inst✝¹ : IsScalarTower R Rₛ Aₛ
inst✝ : IsScalarTower R A Aₛ
hA : IsLocalization (Algebra.algebraMapSubmonoid A S) Aₛ
v : Set A
hv : span R v = ⊤
a : A
s : R
hs : s ∈ ↑S
⊢ IsLocalization.mk' Rₛ 1 { val := s, property := hs } • ↑(algebraMap A Aₛ) a ∈ span Rₛ (↑(algebraMap A Aₛ) '' v)
[PROOFSTEP]
refine' smul_mem _ _ (span_subset_span R Rₛ _ _)
[GOAL]
case intro.intro.mk.intro.intro
R : Type u_1
Rₛ : Type u_2
inst✝¹⁰ : CommRing R
inst✝⁹ : CommRing Rₛ
inst✝⁸ : Algebra R Rₛ
S : Submonoid R
hT : IsLocalization S Rₛ
A : Type u_3
inst✝⁷ : CommRing A
inst✝⁶ : Algebra R A
Aₛ : Type u_4
inst✝⁵ : CommRing Aₛ
inst✝⁴ : Algebra A Aₛ
inst✝³ : Algebra Rₛ Aₛ
inst✝² : Algebra R Aₛ
inst✝¹ : IsScalarTower R Rₛ Aₛ
inst✝ : IsScalarTower R A Aₛ
hA : IsLocalization (Algebra.algebraMapSubmonoid A S) Aₛ
v : Set A
hv : span R v = ⊤
a : A
s : R
hs : s ∈ ↑S
⊢ ↑(algebraMap A Aₛ) a ∈ ↑(span R (↑(algebraMap A Aₛ) '' v))
[PROOFSTEP]
rw [← Algebra.coe_linearMap, ← LinearMap.coe_restrictScalars R, ← LinearMap.map_span]
[GOAL]
case intro.intro.mk.intro.intro
R : Type u_1
Rₛ : Type u_2
inst✝¹⁰ : CommRing R
inst✝⁹ : CommRing Rₛ
inst✝⁸ : Algebra R Rₛ
S : Submonoid R
hT : IsLocalization S Rₛ
A : Type u_3
inst✝⁷ : CommRing A
inst✝⁶ : Algebra R A
Aₛ : Type u_4
inst✝⁵ : CommRing Aₛ
inst✝⁴ : Algebra A Aₛ
inst✝³ : Algebra Rₛ Aₛ
inst✝² : Algebra R Aₛ
inst✝¹ : IsScalarTower R Rₛ Aₛ
inst✝ : IsScalarTower R A Aₛ
hA : IsLocalization (Algebra.algebraMapSubmonoid A S) Aₛ
v : Set A
hv : span R v = ⊤
a : A
s : R
hs : s ∈ ↑S
⊢ ↑(↑R (Algebra.linearMap A Aₛ)) a ∈ ↑(map (↑R (Algebra.linearMap A Aₛ)) (span R v))
[PROOFSTEP]
exact mem_map_of_mem (hv.symm ▸ mem_top)
[GOAL]
R : Type u_1
Rₛ : Type u_2
inst✝¹⁰ : CommRing R
inst✝⁹ : CommRing Rₛ
inst✝⁸ : Algebra R Rₛ
S : Submonoid R
hT : IsLocalization S Rₛ
A : Type u_3
inst✝⁷ : CommRing A
inst✝⁶ : Algebra R A
Aₛ : Type u_4
inst✝⁵ : CommRing Aₛ
inst✝⁴ : Algebra A Aₛ
inst✝³ : Algebra Rₛ Aₛ
inst✝² : Algebra R Aₛ
inst✝¹ : IsScalarTower R Rₛ Aₛ
inst✝ : IsScalarTower R A Aₛ
hA : IsLocalization (Algebra.algebraMapSubmonoid A S) Aₛ
ι : Type u_5
b : Basis ι R A
⊢ ⊤ ≤ span Rₛ (Set.range (↑(algebraMap A Aₛ) ∘ ↑b))
[PROOFSTEP]
rw [Set.range_comp, SpanEqTop.localization_localization Rₛ S Aₛ b.span_eq]
[GOAL]
R : Type u_1
Rₛ : Type u_2
inst✝¹⁰ : CommRing R
inst✝⁹ : CommRing Rₛ
inst✝⁸ : Algebra R Rₛ
S : Submonoid R
hT : IsLocalization S Rₛ
A : Type u_3
inst✝⁷ : CommRing A
inst✝⁶ : Algebra R A
Aₛ : Type u_4
inst✝⁵ : CommRing Aₛ
inst✝⁴ : Algebra A Aₛ
inst✝³ : Algebra Rₛ Aₛ
inst✝² : Algebra R Aₛ
inst✝¹ : IsScalarTower R Rₛ Aₛ
inst✝ : IsScalarTower R A Aₛ
hA : IsLocalization (Algebra.algebraMapSubmonoid A S) Aₛ
ι : Type u_5
b : Basis ι R A
x : A
i : ι
⊢ ↑(↑(localizationLocalization Rₛ S Aₛ b).repr (↑(algebraMap A Aₛ) x)) i =
    ↑(↑(localizationLocalization Rₛ S Aₛ b).repr
          (Finsupp.sum (↑b.repr x) fun j c => ↑(algebraMap R Rₛ) c • ↑(algebraMap A Aₛ) (↑b j)))
      i
[PROOFSTEP]
simp_rw [IsScalarTower.algebraMap_smul, Algebra.smul_def, IsScalarTower.algebraMap_apply R A Aₛ, ← _root_.map_mul, ←
  map_finsupp_sum, ← Algebra.smul_def, ← Finsupp.total_apply, Basis.total_repr]
[GOAL]
R : Type u_1
Rₛ : Type u_2
inst✝¹⁰ : CommRing R
inst✝⁹ : CommRing Rₛ
inst✝⁸ : Algebra R Rₛ
S : Submonoid R
hT : IsLocalization S Rₛ
A : Type u_3
inst✝⁷ : CommRing A
inst✝⁶ : Algebra R A
Aₛ : Type u_4
inst✝⁵ : CommRing Aₛ
inst✝⁴ : Algebra A Aₛ
inst✝³ : Algebra Rₛ Aₛ
inst✝² : Algebra R Aₛ
inst✝¹ : IsScalarTower R Rₛ Aₛ
inst✝ : IsScalarTower R A Aₛ
hA : IsLocalization (Algebra.algebraMapSubmonoid A S) Aₛ
ι : Type u_5
b : Basis ι R A
x : A
i : ι
⊢ ↑(↑(localizationLocalization Rₛ S Aₛ b).repr
          (Finsupp.sum (↑b.repr x) fun j c => ↑(algebraMap R Rₛ) c • ↑(algebraMap A Aₛ) (↑b j)))
      i =
    Finsupp.sum (↑b.repr x) fun j c => ↑(algebraMap R Rₛ) c • ↑(Finsupp.single j 1) i
[PROOFSTEP]
simp_rw [← b.localizationLocalization_apply Rₛ S Aₛ, map_finsupp_sum, LinearEquiv.map_smul, Basis.repr_self,
  Finsupp.sum_apply, Finsupp.smul_apply]
[GOAL]
R : Type u_1
Rₛ : Type u_2
inst✝¹⁰ : CommRing R
inst✝⁹ : CommRing Rₛ
inst✝⁸ : Algebra R Rₛ
S : Submonoid R
hT : IsLocalization S Rₛ
A : Type u_3
inst✝⁷ : CommRing A
inst✝⁶ : Algebra R A
Aₛ : Type u_4
inst✝⁵ : CommRing Aₛ
inst✝⁴ : Algebra A Aₛ
inst✝³ : Algebra Rₛ Aₛ
inst✝² : Algebra R Aₛ
inst✝¹ : IsScalarTower R Rₛ Aₛ
inst✝ : IsScalarTower R A Aₛ
hA : IsLocalization (Algebra.algebraMapSubmonoid A S) Aₛ
ι : Type u_5
b : Basis ι R A
x : A
i j : ι
x✝ : j ∈ (↑b.repr x).support
hj : j ≠ i
⊢ (fun j c => ↑(algebraMap R Rₛ) c • ↑(Finsupp.single j 1) i) j (↑(↑b.repr x) j) = 0
[PROOFSTEP]
simp [hj]
[GOAL]
R : Type u_1
Rₛ : Type u_2
inst✝¹⁰ : CommRing R
inst✝⁹ : CommRing Rₛ
inst✝⁸ : Algebra R Rₛ
S : Submonoid R
hT : IsLocalization S Rₛ
A : Type u_3
inst✝⁷ : CommRing A
inst✝⁶ : Algebra R A
Aₛ : Type u_4
inst✝⁵ : CommRing Aₛ
inst✝⁴ : Algebra A Aₛ
inst✝³ : Algebra Rₛ Aₛ
inst✝² : Algebra R Aₛ
inst✝¹ : IsScalarTower R Rₛ Aₛ
inst✝ : IsScalarTower R A Aₛ
hA : IsLocalization (Algebra.algebraMapSubmonoid A S) Aₛ
ι : Type u_5
b : Basis ι R A
x : A
i : ι
hi : ¬i ∈ (↑b.repr x).support
⊢ (fun j c => ↑(algebraMap R Rₛ) c • ↑(Finsupp.single j 1) i) i (↑(↑b.repr x) i) = 0
[PROOFSTEP]
simp [Finsupp.not_mem_support_iff.mp hi]
[GOAL]
R : Type u_1
Rₛ : Type u_2
inst✝¹⁰ : CommRing R
inst✝⁹ : CommRing Rₛ
inst✝⁸ : Algebra R Rₛ
S : Submonoid R
hT : IsLocalization S Rₛ
A : Type u_3
inst✝⁷ : CommRing A
inst✝⁶ : Algebra R A
Aₛ : Type u_4
inst✝⁵ : CommRing Aₛ
inst✝⁴ : Algebra A Aₛ
inst✝³ : Algebra Rₛ Aₛ
inst✝² : Algebra R Aₛ
inst✝¹ : IsScalarTower R Rₛ Aₛ
inst✝ : IsScalarTower R A Aₛ
hA : IsLocalization (Algebra.algebraMapSubmonoid A S) Aₛ
ι : Type u_5
b : Basis ι R A
x : A
i : ι
⊢ (fun j c => ↑(algebraMap R Rₛ) c • ↑(Finsupp.single j 1) i) i (↑(↑b.repr x) i) = ↑(algebraMap R Rₛ) (↑(↑b.repr x) i)
[PROOFSTEP]
simp [Algebra.smul_def]
[GOAL]
R : Type u_1
Rₛ : Type u_2
inst✝¹⁰ : CommRing R
inst✝⁹ : CommRing Rₛ
inst✝⁸ : Algebra R Rₛ
S : Submonoid R
hT : IsLocalization S Rₛ
A : Type u_3
inst✝⁷ : CommRing A
inst✝⁶ : Algebra R A
Aₛ : Type u_4
inst✝⁵ : CommRing Aₛ
inst✝⁴ : Algebra A Aₛ
inst✝³ : Algebra Rₛ Aₛ
inst✝² : Algebra R Aₛ
inst✝¹ : IsScalarTower R Rₛ Aₛ
inst✝ : IsScalarTower R A Aₛ
hA : IsLocalization (Algebra.algebraMapSubmonoid A S) Aₛ
ι : Type u_5
b : Basis ι R A
⊢ span R (Set.range ↑(localizationLocalization Rₛ S Aₛ b)) = span R (↑(IsScalarTower.toAlgHom R A Aₛ) '' Set.range ↑b)
[PROOFSTEP]
congr
[GOAL]
case e_s
R : Type u_1
Rₛ : Type u_2
inst✝¹⁰ : CommRing R
inst✝⁹ : CommRing Rₛ
inst✝⁸ : Algebra R Rₛ
S : Submonoid R
hT : IsLocalization S Rₛ
A : Type u_3
inst✝⁷ : CommRing A
inst✝⁶ : Algebra R A
Aₛ : Type u_4
inst✝⁵ : CommRing Aₛ
inst✝⁴ : Algebra A Aₛ
inst✝³ : Algebra Rₛ Aₛ
inst✝² : Algebra R Aₛ
inst✝¹ : IsScalarTower R Rₛ Aₛ
inst✝ : IsScalarTower R A Aₛ
hA : IsLocalization (Algebra.algebraMapSubmonoid A S) Aₛ
ι : Type u_5
b : Basis ι R A
⊢ Set.range ↑(localizationLocalization Rₛ S Aₛ b) = ↑(IsScalarTower.toAlgHom R A Aₛ) '' Set.range ↑b
[PROOFSTEP]
ext
[GOAL]
case e_s.h
R : Type u_1
Rₛ : Type u_2
inst✝¹⁰ : CommRing R
inst✝⁹ : CommRing Rₛ
inst✝⁸ : Algebra R Rₛ
S : Submonoid R
hT : IsLocalization S Rₛ
A : Type u_3
inst✝⁷ : CommRing A
inst✝⁶ : Algebra R A
Aₛ : Type u_4
inst✝⁵ : CommRing Aₛ
inst✝⁴ : Algebra A Aₛ
inst✝³ : Algebra Rₛ Aₛ
inst✝² : Algebra R Aₛ
inst✝¹ : IsScalarTower R Rₛ Aₛ
inst✝ : IsScalarTower R A Aₛ
hA : IsLocalization (Algebra.algebraMapSubmonoid A S) Aₛ
ι : Type u_5
b : Basis ι R A
x✝ : Aₛ
⊢ x✝ ∈ Set.range ↑(localizationLocalization Rₛ S Aₛ b) ↔ x✝ ∈ ↑(IsScalarTower.toAlgHom R A Aₛ) '' Set.range ↑b
[PROOFSTEP]
simp
[GOAL]
R : Type u_1
Rₛ : Type u_2
inst✝¹⁰ : CommRing R
inst✝⁹ : CommRing Rₛ
inst✝⁸ : Algebra R Rₛ
S : Submonoid R
hT : IsLocalization S Rₛ
A : Type u_3
inst✝⁷ : CommRing A
inst✝⁶ : Algebra R A
Aₛ : Type u_4
inst✝⁵ : CommRing Aₛ
inst✝⁴ : Algebra A Aₛ
inst✝³ : Algebra Rₛ Aₛ
inst✝² : Algebra R Aₛ
inst✝¹ : IsScalarTower R Rₛ Aₛ
inst✝ : IsScalarTower R A Aₛ
hA : IsLocalization (Algebra.algebraMapSubmonoid A S) Aₛ
ι : Type u_5
b : Basis ι R A
⊢ span R (↑(IsScalarTower.toAlgHom R A Aₛ) '' Set.range ↑b) =
    map (IsScalarTower.toAlgHom R A Aₛ) (span R (Set.range ↑b))
[PROOFSTEP]
rw [Submodule.map_span]
[GOAL]
R : Type u_1
Rₛ : Type u_2
inst✝¹⁰ : CommRing R
inst✝⁹ : CommRing Rₛ
inst✝⁸ : Algebra R Rₛ
S : Submonoid R
hT : IsLocalization S Rₛ
A : Type u_3
inst✝⁷ : CommRing A
inst✝⁶ : Algebra R A
Aₛ : Type u_4
inst✝⁵ : CommRing Aₛ
inst✝⁴ : Algebra A Aₛ
inst✝³ : Algebra Rₛ Aₛ
inst✝² : Algebra R Aₛ
inst✝¹ : IsScalarTower R Rₛ Aₛ
inst✝ : IsScalarTower R A Aₛ
hA : IsLocalization (Algebra.algebraMapSubmonoid A S) Aₛ
ι : Type u_5
b : Basis ι R A
⊢ map (IsScalarTower.toAlgHom R A Aₛ) (span R (Set.range ↑b)) = LinearMap.range (IsScalarTower.toAlgHom R A Aₛ)
[PROOFSTEP]
rw [b.span_eq, Submodule.map_top]
[GOAL]
R : Type u_1
inst✝¹¹ : CommRing R
S : Submonoid R
A : Type u_2
inst✝¹⁰ : CommRing A
inst✝⁹ : Algebra R A
inst✝⁸ : IsLocalization S A
M : Type u_3
N : Type u_4
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : Module A M
inst✝⁴ : IsScalarTower R A M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : Module A N
inst✝ : IsScalarTower R A N
f : M →ₗ[R] N
⊢ ∀ (r : A) (x : M),
    AddHom.toFun { toFun := ↑f, map_add' := (_ : ∀ (x y : M), ↑f (x + y) = ↑f x + ↑f y) } (r • x) =
      ↑(RingHom.id A) r • AddHom.toFun { toFun := ↑f, map_add' := (_ : ∀ (x y : M), ↑f (x + y) = ↑f x + ↑f y) } x
[PROOFSTEP]
intro r m
[GOAL]
R : Type u_1
inst✝¹¹ : CommRing R
S : Submonoid R
A : Type u_2
inst✝¹⁰ : CommRing A
inst✝⁹ : Algebra R A
inst✝⁸ : IsLocalization S A
M : Type u_3
N : Type u_4
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : Module A M
inst✝⁴ : IsScalarTower R A M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : Module A N
inst✝ : IsScalarTower R A N
f : M →ₗ[R] N
r : A
m : M
⊢ AddHom.toFun { toFun := ↑f, map_add' := (_ : ∀ (x y : M), ↑f (x + y) = ↑f x + ↑f y) } (r • m) =
    ↑(RingHom.id A) r • AddHom.toFun { toFun := ↑f, map_add' := (_ : ∀ (x y : M), ↑f (x + y) = ↑f x + ↑f y) } m
[PROOFSTEP]
simp only [RingHom.id_apply]
[GOAL]
R : Type u_1
inst✝¹¹ : CommRing R
S : Submonoid R
A : Type u_2
inst✝¹⁰ : CommRing A
inst✝⁹ : Algebra R A
inst✝⁸ : IsLocalization S A
M : Type u_3
N : Type u_4
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : Module A M
inst✝⁴ : IsScalarTower R A M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : Module A N
inst✝ : IsScalarTower R A N
f : M →ₗ[R] N
r : A
m : M
⊢ ↑f (r • m) = r • ↑f m
[PROOFSTEP]
rcases mk'_surjective S r with ⟨r, s, rfl⟩
[GOAL]
case intro.intro
R : Type u_1
inst✝¹¹ : CommRing R
S : Submonoid R
A : Type u_2
inst✝¹⁰ : CommRing A
inst✝⁹ : Algebra R A
inst✝⁸ : IsLocalization S A
M : Type u_3
N : Type u_4
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : Module A M
inst✝⁴ : IsScalarTower R A M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : Module A N
inst✝ : IsScalarTower R A N
f : M →ₗ[R] N
m : M
r : R
s : { x // x ∈ S }
⊢ ↑f (mk' A r s • m) = mk' A r s • ↑f m
[PROOFSTEP]
calc
  f (mk' A r s • m) = ((s : R) • mk' A 1 s) • f (mk' A r s • m) := by simp
  _ = (mk' A 1 s) • (s : R) • f (mk' A r s • m) := by rw [smul_comm, smul_assoc]
  _ = (mk' A 1 s) • f ((s : R) • mk' A r s • m) := by simp
  _ = (mk' A 1 s) • f (r • m) := by rw [← smul_assoc, smul_mk'_self, algebraMap_smul]
  _ = (mk' A 1 s) • r • f m := by simp
  _ = mk' A r s • f m := by rw [smul_comm, ← smul_assoc, smul_mk'_one]
[GOAL]
R : Type u_1
inst✝¹¹ : CommRing R
S : Submonoid R
A : Type u_2
inst✝¹⁰ : CommRing A
inst✝⁹ : Algebra R A
inst✝⁸ : IsLocalization S A
M : Type u_3
N : Type u_4
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : Module A M
inst✝⁴ : IsScalarTower R A M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : Module A N
inst✝ : IsScalarTower R A N
f : M →ₗ[R] N
m : M
r : R
s : { x // x ∈ S }
⊢ ↑f (mk' A r s • m) = (↑s • mk' A 1 s) • ↑f (mk' A r s • m)
[PROOFSTEP]
simp
[GOAL]
R : Type u_1
inst✝¹¹ : CommRing R
S : Submonoid R
A : Type u_2
inst✝¹⁰ : CommRing A
inst✝⁹ : Algebra R A
inst✝⁸ : IsLocalization S A
M : Type u_3
N : Type u_4
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : Module A M
inst✝⁴ : IsScalarTower R A M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : Module A N
inst✝ : IsScalarTower R A N
f : M →ₗ[R] N
m : M
r : R
s : { x // x ∈ S }
⊢ (↑s • mk' A 1 s) • ↑f (mk' A r s • m) = mk' A 1 s • ↑s • ↑f (mk' A r s • m)
[PROOFSTEP]
rw [smul_comm, smul_assoc]
[GOAL]
R : Type u_1
inst✝¹¹ : CommRing R
S : Submonoid R
A : Type u_2
inst✝¹⁰ : CommRing A
inst✝⁹ : Algebra R A
inst✝⁸ : IsLocalization S A
M : Type u_3
N : Type u_4
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : Module A M
inst✝⁴ : IsScalarTower R A M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : Module A N
inst✝ : IsScalarTower R A N
f : M →ₗ[R] N
m : M
r : R
s : { x // x ∈ S }
⊢ mk' A 1 s • ↑s • ↑f (mk' A r s • m) = mk' A 1 s • ↑f (↑s • mk' A r s • m)
[PROOFSTEP]
simp
[GOAL]
R : Type u_1
inst✝¹¹ : CommRing R
S : Submonoid R
A : Type u_2
inst✝¹⁰ : CommRing A
inst✝⁹ : Algebra R A
inst✝⁸ : IsLocalization S A
M : Type u_3
N : Type u_4
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : Module A M
inst✝⁴ : IsScalarTower R A M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : Module A N
inst✝ : IsScalarTower R A N
f : M →ₗ[R] N
m : M
r : R
s : { x // x ∈ S }
⊢ mk' A 1 s • ↑f (↑s • mk' A r s • m) = mk' A 1 s • ↑f (r • m)
[PROOFSTEP]
rw [← smul_assoc, smul_mk'_self, algebraMap_smul]
[GOAL]
R : Type u_1
inst✝¹¹ : CommRing R
S : Submonoid R
A : Type u_2
inst✝¹⁰ : CommRing A
inst✝⁹ : Algebra R A
inst✝⁸ : IsLocalization S A
M : Type u_3
N : Type u_4
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : Module A M
inst✝⁴ : IsScalarTower R A M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : Module A N
inst✝ : IsScalarTower R A N
f : M →ₗ[R] N
m : M
r : R
s : { x // x ∈ S }
⊢ mk' A 1 s • ↑f (r • m) = mk' A 1 s • r • ↑f m
[PROOFSTEP]
simp
[GOAL]
R : Type u_1
inst✝¹¹ : CommRing R
S : Submonoid R
A : Type u_2
inst✝¹⁰ : CommRing A
inst✝⁹ : Algebra R A
inst✝⁸ : IsLocalization S A
M : Type u_3
N : Type u_4
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : Module A M
inst✝⁴ : IsScalarTower R A M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : Module A N
inst✝ : IsScalarTower R A N
f : M →ₗ[R] N
m : M
r : R
s : { x // x ∈ S }
⊢ mk' A 1 s • r • ↑f m = mk' A r s • ↑f m
[PROOFSTEP]
rw [smul_comm, ← smul_assoc, smul_mk'_one]


[GOAL]
α : Type u
β : Type u_1
w x✝ y✝ z : α
inst✝ : GeneralizedBooleanAlgebra α
x y : α
⊢ x \ y ⊔ x ⊓ y = x
[PROOFSTEP]
rw [sup_comm, sup_inf_sdiff]
[GOAL]
α : Type u
β : Type u_1
w x✝ y✝ z : α
inst✝ : GeneralizedBooleanAlgebra α
x y : α
⊢ x \ y ⊓ (x ⊓ y) = ⊥
[PROOFSTEP]
rw [inf_comm, inf_inf_sdiff]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
src✝ : Bot α := toBot
a : α
⊢ ⊥ ≤ a
[PROOFSTEP]
rw [← inf_inf_sdiff a a, inf_assoc]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
src✝ : Bot α := toBot
a : α
⊢ a ⊓ (a ⊓ a \ a) ≤ a
[PROOFSTEP]
exact inf_le_left
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
s : x ⊓ y ⊔ z = x
i : x ⊓ y ⊓ z = ⊥
⊢ x \ y = z
[PROOFSTEP]
conv_rhs at s => rw [← sup_inf_sdiff x y, sup_comm]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
s : x ⊓ y ⊔ z = x
i : x ⊓ y ⊓ z = ⊥
| x
[PROOFSTEP]
rw [← sup_inf_sdiff x y, sup_comm]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
s : x ⊓ y ⊔ z = x
i : x ⊓ y ⊓ z = ⊥
| x
[PROOFSTEP]
rw [← sup_inf_sdiff x y, sup_comm]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
s : x ⊓ y ⊔ z = x
i : x ⊓ y ⊓ z = ⊥
| x
[PROOFSTEP]
rw [← sup_inf_sdiff x y, sup_comm]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
s : x ⊓ y ⊔ z = x \ y ⊔ x ⊓ y
i : x ⊓ y ⊓ z = ⊥
⊢ x \ y = z
[PROOFSTEP]
rw [sup_comm] at s
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
s : z ⊔ x ⊓ y = x \ y ⊔ x ⊓ y
i : x ⊓ y ⊓ z = ⊥
⊢ x \ y = z
[PROOFSTEP]
conv_rhs at i => rw [← inf_inf_sdiff x y, inf_comm]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
s : z ⊔ x ⊓ y = x \ y ⊔ x ⊓ y
i : x ⊓ y ⊓ z = ⊥
| ⊥
[PROOFSTEP]
rw [← inf_inf_sdiff x y, inf_comm]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
s : z ⊔ x ⊓ y = x \ y ⊔ x ⊓ y
i : x ⊓ y ⊓ z = ⊥
| ⊥
[PROOFSTEP]
rw [← inf_inf_sdiff x y, inf_comm]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
s : z ⊔ x ⊓ y = x \ y ⊔ x ⊓ y
i : x ⊓ y ⊓ z = ⊥
| ⊥
[PROOFSTEP]
rw [← inf_inf_sdiff x y, inf_comm]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
s : z ⊔ x ⊓ y = x \ y ⊔ x ⊓ y
i : x ⊓ y ⊓ z = x \ y ⊓ (x ⊓ y)
⊢ x \ y = z
[PROOFSTEP]
rw [inf_comm] at i
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
s : z ⊔ x ⊓ y = x \ y ⊔ x ⊓ y
i : z ⊓ (x ⊓ y) = x \ y ⊓ (x ⊓ y)
⊢ x \ y = z
[PROOFSTEP]
exact (eq_of_inf_eq_sup_eq i s).symm
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ y \ x ⊔ x = y \ x ⊔ (x ⊔ x ⊓ y)
[PROOFSTEP]
rw [sup_inf_self]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ y \ x ⊔ (x ⊔ x ⊓ y) = y ⊓ x ⊔ y \ x ⊔ x
[PROOFSTEP]
ac_rfl
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ y ⊓ x ⊔ y \ x ⊔ x = y ⊔ x
[PROOFSTEP]
rw [sup_inf_sdiff]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ ⊥ = x ⊓ y ⊓ x \ y
[PROOFSTEP]
rw [inf_inf_sdiff]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ x ⊓ y ⊓ x \ y = x ⊓ (y ⊓ x ⊔ y \ x) ⊓ x \ y
[PROOFSTEP]
rw [sup_inf_sdiff]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ x ⊓ (y ⊓ x ⊔ y \ x) ⊓ x \ y = (x ⊓ (y ⊓ x) ⊔ x ⊓ y \ x) ⊓ x \ y
[PROOFSTEP]
rw [inf_sup_left]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ (x ⊓ (y ⊓ x) ⊔ x ⊓ y \ x) ⊓ x \ y = (y ⊓ (x ⊓ x) ⊔ x ⊓ y \ x) ⊓ x \ y
[PROOFSTEP]
ac_rfl
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ (y ⊓ (x ⊓ x) ⊔ x ⊓ y \ x) ⊓ x \ y = (y ⊓ x ⊔ x ⊓ y \ x) ⊓ x \ y
[PROOFSTEP]
rw [inf_idem]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ (y ⊓ x ⊔ x ⊓ y \ x) ⊓ x \ y = x ⊓ y ⊓ x \ y ⊔ x ⊓ y \ x ⊓ x \ y
[PROOFSTEP]
rw [inf_sup_right, @inf_comm _ _ x y]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ x ⊓ y ⊓ x \ y ⊔ x ⊓ y \ x ⊓ x \ y = x ⊓ y \ x ⊓ x \ y
[PROOFSTEP]
rw [inf_inf_sdiff, bot_sup_eq]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ x ⊓ y \ x ⊓ x \ y = x ⊓ x \ y ⊓ y \ x
[PROOFSTEP]
ac_rfl
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ x ⊓ x \ y ⊓ y \ x = x \ y ⊓ y \ x
[PROOFSTEP]
rw [inf_of_le_right sdiff_le']
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ x ⊓ y \ x = (x ⊓ y ⊔ x \ y) ⊓ y \ x
[PROOFSTEP]
rw [sup_inf_sdiff]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ (x ⊓ y ⊔ x \ y) ⊓ y \ x = x ⊓ y ⊓ y \ x ⊔ x \ y ⊓ y \ x
[PROOFSTEP]
rw [inf_sup_right]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ x ⊓ y ⊓ y \ x ⊔ x \ y ⊓ y \ x = ⊥
[PROOFSTEP]
rw [@inf_comm _ _ x y, inf_inf_sdiff, sdiff_inf_sdiff, bot_sup_eq]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ y \ x ⊓ x = ⊥
[PROOFSTEP]
rw [inf_comm, inf_sdiff_self_right]
[GOAL]
α : Type u
β : Type u_1
w x✝ y✝ z✝ : α
inst✝ : GeneralizedBooleanAlgebra α
src✝¹ : GeneralizedBooleanAlgebra α := inst✝
src✝ : OrderBot α := toOrderBot
y x z : α
h : y \ x ≤ z
⊢ y \ x = x ⊓ y \ x ⊔ z ⊓ y \ x
[PROOFSTEP]
rw [inf_eq_right.2 h, inf_sdiff_self_right, bot_sup_eq]
[GOAL]
α : Type u
β : Type u_1
w x✝ y✝ z✝ : α
inst✝ : GeneralizedBooleanAlgebra α
src✝¹ : GeneralizedBooleanAlgebra α := inst✝
src✝ : OrderBot α := toOrderBot
y x z : α
h : y \ x ≤ z
⊢ y ⊔ (x ⊔ z) = y \ x ⊔ x ⊔ z
[PROOFSTEP]
rw [← sup_assoc, ← @sdiff_sup_self' _ x y]
[GOAL]
α : Type u
β : Type u_1
w x✝ y✝ z✝ : α
inst✝ : GeneralizedBooleanAlgebra α
src✝¹ : GeneralizedBooleanAlgebra α := inst✝
src✝ : OrderBot α := toOrderBot
y x z : α
h : y \ x ≤ z
⊢ y \ x ⊔ x ⊔ z = x ⊔ z ⊔ y \ x
[PROOFSTEP]
ac_rfl
[GOAL]
α : Type u
β : Type u_1
w x✝ y✝ z✝ : α
inst✝ : GeneralizedBooleanAlgebra α
src✝¹ : GeneralizedBooleanAlgebra α := inst✝
src✝ : OrderBot α := toOrderBot
y x z : α
h : y ≤ x ⊔ z
⊢ x ⊔ z ⊔ x ≤ z ⊔ x
[PROOFSTEP]
rw [sup_assoc, sup_comm, sup_assoc, sup_idem]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
h : x ≤ y ∧ Disjoint x z
⊢ x ≤ y \ z
[PROOFSTEP]
rw [← h.2.sdiff_eq_left]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
h : x ≤ y ∧ Disjoint x z
⊢ x \ z ≤ y \ z
[PROOFSTEP]
exact sdiff_le_sdiff_right h.1
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
hi : Disjoint x z
hs : x ⊔ z = y
h : y ⊓ x = x
⊢ y ⊓ x ⊔ z = y
[PROOFSTEP]
rw [h, hs]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
hi : Disjoint x z
hs : x ⊔ z = y
h : y ⊓ x = x
⊢ y ⊓ x ⊓ z = ⊥
[PROOFSTEP]
rw [h, hi.eq_bot]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
hd : Disjoint x z
hz : z ≤ y
hs : y ≤ x ⊔ z
⊢ y ⊓ x ⊔ z = y
[PROOFSTEP]
rw [← inf_eq_right] at hs
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
hd : Disjoint x z
hz : z ≤ y
hs : (x ⊔ z) ⊓ y = y
⊢ y ⊓ x ⊔ z = y
[PROOFSTEP]
rwa [sup_inf_right, inf_sup_right, @sup_comm _ _ x, inf_sup_self, inf_comm, @sup_comm _ _ z, hs, sup_eq_left]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
hd : Disjoint x z
hz : z ≤ y
hs : y ≤ x ⊔ z
⊢ y ⊓ x ⊓ z = ⊥
[PROOFSTEP]
rw [inf_assoc, hd.eq_bot, inf_bot_eq]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
hz : z ≤ y
hx : x ≤ y
H : Disjoint z (y \ x)
⊢ z ⊔ y \ x ≤ x ⊔ y \ x
[PROOFSTEP]
rw [sup_sdiff_cancel_right hx]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
hz : z ≤ y
hx : x ≤ y
H : Disjoint z (y \ x)
⊢ z ⊔ y \ x ≤ y
[PROOFSTEP]
refine' le_trans (sup_le_sup_left sdiff_le z) _
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
hz : z ≤ y
hx : x ≤ y
H : Disjoint z (y \ x)
⊢ z ⊔ y ≤ y
[PROOFSTEP]
rw [sup_eq_right.2 hz]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
hz : z ≤ y
hx : x ≤ y
⊢ z ⊓ y \ x = ⊥ ↔ z ≤ x
[PROOFSTEP]
rw [← disjoint_iff]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
hz : z ≤ y
hx : x ≤ y
⊢ Disjoint z (y \ x) ↔ z ≤ x
[PROOFSTEP]
exact disjoint_sdiff_iff_le hz hx
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
hz : z ≤ y
hx : x ≤ y
H : x ≤ z
⊢ y = z ⊔ y \ x
[PROOFSTEP]
apply le_antisymm
[GOAL]
case a
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
hz : z ≤ y
hx : x ≤ y
H : x ≤ z
⊢ y ≤ z ⊔ y \ x
[PROOFSTEP]
conv_lhs => rw [← sup_inf_sdiff y x]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
hz : z ≤ y
hx : x ≤ y
H : x ≤ z
| y
[PROOFSTEP]
rw [← sup_inf_sdiff y x]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
hz : z ≤ y
hx : x ≤ y
H : x ≤ z
| y
[PROOFSTEP]
rw [← sup_inf_sdiff y x]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
hz : z ≤ y
hx : x ≤ y
H : x ≤ z
| y
[PROOFSTEP]
rw [← sup_inf_sdiff y x]
[GOAL]
case a
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
hz : z ≤ y
hx : x ≤ y
H : x ≤ z
⊢ y ⊓ x ⊔ y \ x ≤ z ⊔ y \ x
[PROOFSTEP]
apply sup_le_sup_right
[GOAL]
case a.h₁
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
hz : z ≤ y
hx : x ≤ y
H : x ≤ z
⊢ y ⊓ x ≤ z
[PROOFSTEP]
rwa [inf_eq_right.2 hx]
[GOAL]
case a
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
hz : z ≤ y
hx : x ≤ y
H : x ≤ z
⊢ z ⊔ y \ x ≤ y
[PROOFSTEP]
apply le_trans
[GOAL]
case a.a
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
hz : z ≤ y
hx : x ≤ y
H : x ≤ z
⊢ z ⊔ y \ x ≤ ?a.b✝
[PROOFSTEP]
apply sup_le_sup_right hz
[GOAL]
case a.a
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
hz : z ≤ y
hx : x ≤ y
H : x ≤ z
⊢ y ⊔ y \ x ≤ y
[PROOFSTEP]
rw [sup_sdiff_left]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
hz : z ≤ y
hx : x ≤ y
H : y = z ⊔ y \ x
⊢ x ≤ z
[PROOFSTEP]
conv_lhs at H => rw [← sup_sdiff_cancel_right hx]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
hz : z ≤ y
hx : x ≤ y
H : y = z ⊔ y \ x
| y
[PROOFSTEP]
rw [← sup_sdiff_cancel_right hx]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
hz : z ≤ y
hx : x ≤ y
H : y = z ⊔ y \ x
| y
[PROOFSTEP]
rw [← sup_sdiff_cancel_right hx]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
hz : z ≤ y
hx : x ≤ y
H : y = z ⊔ y \ x
| y
[PROOFSTEP]
rw [← sup_sdiff_cancel_right hx]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
hz : z ≤ y
hx : x ≤ y
H : x ⊔ y \ x = z ⊔ y \ x
⊢ x ≤ z
[PROOFSTEP]
refine' le_of_inf_le_sup_le _ H.le
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
hz : z ≤ y
hx : x ≤ y
H : x ⊔ y \ x = z ⊔ y \ x
⊢ x ⊓ y \ x ≤ z ⊓ y \ x
[PROOFSTEP]
rw [inf_sdiff_self_right]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
hz : z ≤ y
hx : x ≤ y
H : x ⊔ y \ x = z ⊔ y \ x
⊢ ⊥ ≤ z ⊓ y \ x
[PROOFSTEP]
exact bot_le
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ y ⊓ (x ⊔ z) ⊔ y \ x ⊓ y \ z = (y ⊓ (x ⊔ z) ⊔ y \ x) ⊓ (y ⊓ (x ⊔ z) ⊔ y \ z)
[PROOFSTEP]
rw [sup_inf_left]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ (y ⊓ (x ⊔ z) ⊔ y \ x) ⊓ (y ⊓ (x ⊔ z) ⊔ y \ z) = (y ⊓ x ⊔ y ⊓ z ⊔ y \ x) ⊓ (y ⊓ x ⊔ y ⊓ z ⊔ y \ z)
[PROOFSTEP]
rw [@inf_sup_left _ _ y]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ (y ⊓ x ⊔ y ⊓ z ⊔ y \ x) ⊓ (y ⊓ x ⊔ y ⊓ z ⊔ y \ z) = (y ⊓ z ⊔ (y ⊓ x ⊔ y \ x)) ⊓ (y ⊓ x ⊔ (y ⊓ z ⊔ y \ z))
[PROOFSTEP]
ac_rfl
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ (y ⊓ z ⊔ (y ⊓ x ⊔ y \ x)) ⊓ (y ⊓ x ⊔ (y ⊓ z ⊔ y \ z)) = (y ⊓ z ⊔ y) ⊓ (y ⊓ x ⊔ y)
[PROOFSTEP]
rw [sup_inf_sdiff, sup_inf_sdiff]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ (y ⊓ z ⊔ y) ⊓ (y ⊓ x ⊔ y) = (y ⊔ y ⊓ z) ⊓ (y ⊔ y ⊓ x)
[PROOFSTEP]
ac_rfl
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ (y ⊔ y ⊓ z) ⊓ (y ⊔ y ⊓ x) = y
[PROOFSTEP]
rw [sup_inf_self, sup_inf_self, inf_idem]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ y ⊓ (x ⊔ z) ⊓ (y \ x ⊓ y \ z) = (y ⊓ x ⊔ y ⊓ z) ⊓ (y \ x ⊓ y \ z)
[PROOFSTEP]
rw [inf_sup_left]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ (y ⊓ x ⊔ y ⊓ z) ⊓ (y \ x ⊓ y \ z) = y ⊓ x ⊓ (y \ x ⊓ y \ z) ⊔ y ⊓ z ⊓ (y \ x ⊓ y \ z)
[PROOFSTEP]
rw [inf_sup_right]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ y ⊓ x ⊓ (y \ x ⊓ y \ z) ⊔ y ⊓ z ⊓ (y \ x ⊓ y \ z) = y ⊓ x ⊓ y \ x ⊓ y \ z ⊔ y \ x ⊓ (y \ z ⊓ (y ⊓ z))
[PROOFSTEP]
ac_rfl
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ y ⊓ x ⊓ y \ x ⊓ y \ z ⊔ y \ x ⊓ (y \ z ⊓ (y ⊓ z)) = ⊥
[PROOFSTEP]
rw [inf_inf_sdiff, bot_inf_eq, bot_sup_eq, @inf_comm _ _ (y \ z), inf_inf_sdiff, inf_bot_eq]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
h : y \ x = y \ z
⊢ y ⊓ x ⊓ ?m.20593 h = y ⊓ z ⊓ ?m.20593 h
[PROOFSTEP]
rw [inf_inf_sdiff, h, inf_inf_sdiff]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
h : y \ x = y \ z
⊢ y ⊓ x ⊔ y \ x = y ⊓ z ⊔ y \ x
[PROOFSTEP]
rw [sup_inf_sdiff, h, sup_inf_sdiff]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
h : y ⊓ x = y ⊓ z
⊢ y \ x = y \ z
[PROOFSTEP]
rw [← sdiff_inf_self_right, ← sdiff_inf_self_right z y, inf_comm, h, inf_comm]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ x \ y = x ↔ x \ y = x \ ⊥
[PROOFSTEP]
rw [sdiff_bot]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ x ⊓ y = x ⊓ ⊥ ↔ Disjoint y x
[PROOFSTEP]
rw [inf_bot_eq, inf_comm, disjoint_iff]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ x \ y = x ↔ Disjoint x y
[PROOFSTEP]
rw [sdiff_eq_self_iff_disjoint, disjoint_comm]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
hx : y ≤ x
hy : y ≠ ⊥
⊢ x \ y < x
[PROOFSTEP]
refine' sdiff_le.lt_of_ne fun h => hy _
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
hx : y ≤ x
hy : y ≠ ⊥
h : x \ y = x
⊢ y = ⊥
[PROOFSTEP]
rw [sdiff_eq_self_iff_disjoint', disjoint_iff] at h
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
hx : y ≤ x
hy : y ≠ ⊥
h : x ⊓ y = ⊥
⊢ y = ⊥
[PROOFSTEP]
rw [← h, inf_eq_right.mpr hx]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ x ⊓ y ⊓ z ⊔ y \ z = x ⊓ (y ⊓ z) ⊔ y \ z
[PROOFSTEP]
rw [inf_assoc]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ x ⊓ (y ⊓ z) ⊔ y \ z = (x ⊔ y \ z) ⊓ y
[PROOFSTEP]
rw [sup_inf_right, sup_inf_sdiff]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ (x ⊔ y \ z) ⊓ y = x ⊓ y ⊔ y \ z
[PROOFSTEP]
rw [inf_sup_right, inf_sdiff_left]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ x \ (y \ z) = x \ y ⊔ x ⊓ y ⊓ z
[PROOFSTEP]
rw [sup_comm, inf_comm, ← inf_assoc, sup_inf_inf_sdiff]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ x \ (y \ z) = z ⊓ x ⊔ x \ y
[PROOFSTEP]
apply sdiff_unique
[GOAL]
case s
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ x ⊓ y \ z ⊔ (z ⊓ x ⊔ x \ y) = x
[PROOFSTEP]
calc
  x ⊓ y \ z ⊔ (z ⊓ x ⊔ x \ y) = (x ⊔ (z ⊓ x ⊔ x \ y)) ⊓ (y \ z ⊔ (z ⊓ x ⊔ x \ y)) := by rw [sup_inf_right]
  _ = (x ⊔ x ⊓ z ⊔ x \ y) ⊓ (y \ z ⊔ (x ⊓ z ⊔ x \ y)) := by ac_rfl
  _ = x ⊓ (y \ z ⊔ x ⊓ z ⊔ x \ y) := by rw [sup_inf_self, sup_sdiff_left, ← sup_assoc]
  _ = x ⊓ (y \ z ⊓ (z ⊔ y) ⊔ x ⊓ (z ⊔ y) ⊔ x \ y) := by
    rw [sup_inf_left, sdiff_sup_self', inf_sup_right, @sup_comm _ _ y]
  _ = x ⊓ (y \ z ⊔ (x ⊓ z ⊔ x ⊓ y) ⊔ x \ y) := by rw [inf_sdiff_sup_right, @inf_sup_left _ _ x z y]
  _ = x ⊓ (y \ z ⊔ (x ⊓ z ⊔ (x ⊓ y ⊔ x \ y))) := by ac_rfl
  _ = x ⊓ (y \ z ⊔ (x ⊔ x ⊓ z)) := by rw [sup_inf_sdiff, @sup_comm _ _ (x ⊓ z)]
  _ = x := by rw [sup_inf_self, sup_comm, inf_sup_self]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ x ⊓ y \ z ⊔ (z ⊓ x ⊔ x \ y) = (x ⊔ (z ⊓ x ⊔ x \ y)) ⊓ (y \ z ⊔ (z ⊓ x ⊔ x \ y))
[PROOFSTEP]
rw [sup_inf_right]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ (x ⊔ (z ⊓ x ⊔ x \ y)) ⊓ (y \ z ⊔ (z ⊓ x ⊔ x \ y)) = (x ⊔ x ⊓ z ⊔ x \ y) ⊓ (y \ z ⊔ (x ⊓ z ⊔ x \ y))
[PROOFSTEP]
ac_rfl
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ (x ⊔ x ⊓ z ⊔ x \ y) ⊓ (y \ z ⊔ (x ⊓ z ⊔ x \ y)) = x ⊓ (y \ z ⊔ x ⊓ z ⊔ x \ y)
[PROOFSTEP]
rw [sup_inf_self, sup_sdiff_left, ← sup_assoc]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ x ⊓ (y \ z ⊔ x ⊓ z ⊔ x \ y) = x ⊓ (y \ z ⊓ (z ⊔ y) ⊔ x ⊓ (z ⊔ y) ⊔ x \ y)
[PROOFSTEP]
rw [sup_inf_left, sdiff_sup_self', inf_sup_right, @sup_comm _ _ y]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ x ⊓ (y \ z ⊓ (z ⊔ y) ⊔ x ⊓ (z ⊔ y) ⊔ x \ y) = x ⊓ (y \ z ⊔ (x ⊓ z ⊔ x ⊓ y) ⊔ x \ y)
[PROOFSTEP]
rw [inf_sdiff_sup_right, @inf_sup_left _ _ x z y]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ x ⊓ (y \ z ⊔ (x ⊓ z ⊔ x ⊓ y) ⊔ x \ y) = x ⊓ (y \ z ⊔ (x ⊓ z ⊔ (x ⊓ y ⊔ x \ y)))
[PROOFSTEP]
ac_rfl
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ x ⊓ (y \ z ⊔ (x ⊓ z ⊔ (x ⊓ y ⊔ x \ y))) = x ⊓ (y \ z ⊔ (x ⊔ x ⊓ z))
[PROOFSTEP]
rw [sup_inf_sdiff, @sup_comm _ _ (x ⊓ z)]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ x ⊓ (y \ z ⊔ (x ⊔ x ⊓ z)) = x
[PROOFSTEP]
rw [sup_inf_self, sup_comm, inf_sup_self]
[GOAL]
case i
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ x ⊓ y \ z ⊓ (z ⊓ x ⊔ x \ y) = ⊥
[PROOFSTEP]
calc
  x ⊓ y \ z ⊓ (z ⊓ x ⊔ x \ y) = x ⊓ y \ z ⊓ (z ⊓ x) ⊔ x ⊓ y \ z ⊓ x \ y := by rw [inf_sup_left]
  _ = x ⊓ (y \ z ⊓ z ⊓ x) ⊔ x ⊓ y \ z ⊓ x \ y := by ac_rfl
  _ = x ⊓ y \ z ⊓ x \ y := by rw [inf_sdiff_self_left, bot_inf_eq, inf_bot_eq, bot_sup_eq]
  _ = x ⊓ (y \ z ⊓ y) ⊓ x \ y := by conv_lhs => rw [← inf_sdiff_left]
  _ = x ⊓ (y \ z ⊓ (y ⊓ x \ y)) := by ac_rfl
  _ = ⊥ := by rw [inf_sdiff_self_right, inf_bot_eq, inf_bot_eq]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ x ⊓ y \ z ⊓ (z ⊓ x ⊔ x \ y) = x ⊓ y \ z ⊓ (z ⊓ x) ⊔ x ⊓ y \ z ⊓ x \ y
[PROOFSTEP]
rw [inf_sup_left]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ x ⊓ y \ z ⊓ (z ⊓ x) ⊔ x ⊓ y \ z ⊓ x \ y = x ⊓ (y \ z ⊓ z ⊓ x) ⊔ x ⊓ y \ z ⊓ x \ y
[PROOFSTEP]
ac_rfl
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ x ⊓ (y \ z ⊓ z ⊓ x) ⊔ x ⊓ y \ z ⊓ x \ y = x ⊓ y \ z ⊓ x \ y
[PROOFSTEP]
rw [inf_sdiff_self_left, bot_inf_eq, inf_bot_eq, bot_sup_eq]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ x ⊓ y \ z ⊓ x \ y = x ⊓ (y \ z ⊓ y) ⊓ x \ y
[PROOFSTEP]
conv_lhs => rw [← inf_sdiff_left]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
| x ⊓ y \ z ⊓ x \ y
[PROOFSTEP]
rw [← inf_sdiff_left]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
| x ⊓ y \ z ⊓ x \ y
[PROOFSTEP]
rw [← inf_sdiff_left]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
| x ⊓ y \ z ⊓ x \ y
[PROOFSTEP]
rw [← inf_sdiff_left]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ x ⊓ (y \ z ⊓ y) ⊓ x \ y = x ⊓ (y \ z ⊓ (y ⊓ x \ y))
[PROOFSTEP]
ac_rfl
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ x ⊓ (y \ z ⊓ (y ⊓ x \ y)) = ⊥
[PROOFSTEP]
rw [inf_sdiff_self_right, inf_bot_eq, inf_bot_eq]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ x \ y ⊔ x ⊓ y ⊓ z = z ⊓ x ⊓ y ⊔ x \ y
[PROOFSTEP]
ac_rfl
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ z ⊓ x ⊓ y ⊔ x \ y = x \ y ⊔ x ⊓ z
[PROOFSTEP]
rw [sup_inf_inf_sdiff, sup_comm, inf_comm]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
h : z ≤ x
⊢ x \ (y \ z) = x \ y ⊔ z
[PROOFSTEP]
rw [sdiff_sdiff_right', inf_eq_right.2 h]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ x \ (x \ y) = x ⊓ y
[PROOFSTEP]
rw [sdiff_sdiff_right, inf_idem, sdiff_self, bot_sup_eq]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
h : y ≤ x
⊢ x \ (x \ y) = y
[PROOFSTEP]
rw [sdiff_sdiff_right_self, inf_of_le_right h]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
hy : y ≤ x
h : x \ y = z
⊢ x \ z = y
[PROOFSTEP]
rw [← h, sdiff_sdiff_eq_self hy]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
hxz : x ≤ z
hyz : y ≤ z
h : z \ x = z \ y
⊢ x = y
[PROOFSTEP]
rw [← sdiff_sdiff_eq_self hxz, h, sdiff_sdiff_eq_self hyz]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ (x \ y) \ z = x \ y ⊓ x \ z
[PROOFSTEP]
rw [sdiff_sdiff_left, sdiff_sup]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ z \ (x \ y ⊔ y \ x) = (z \ x ⊔ z ⊓ x ⊓ y) ⊓ (z \ y ⊔ z ⊓ y ⊓ x)
[PROOFSTEP]
rw [sdiff_sup, sdiff_sdiff_right, sdiff_sdiff_right]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ (z \ x ⊔ z ⊓ x ⊓ y) ⊓ (z \ y ⊔ z ⊓ y ⊓ x) = z ⊓ (z \ x ⊔ y) ⊓ (z \ y ⊔ z ⊓ y ⊓ x)
[PROOFSTEP]
rw [sup_inf_left, sup_comm, sup_inf_sdiff]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ z ⊓ (z \ x ⊔ y) ⊓ (z \ y ⊔ z ⊓ y ⊓ x) = z ⊓ (z \ x ⊔ y) ⊓ (z ⊓ (z \ y ⊔ x))
[PROOFSTEP]
rw [sup_inf_left, @sup_comm _ _ (z \ y), sup_inf_sdiff]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ z ⊓ (z \ x ⊔ y) ⊓ (z ⊓ (z \ y ⊔ x)) = z ⊓ z ⊓ (z \ x ⊔ y) ⊓ (z \ y ⊔ x)
[PROOFSTEP]
ac_rfl
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ z ⊓ z ⊓ (z \ x ⊔ y) ⊓ (z \ y ⊔ x) = z ⊓ (z \ x ⊔ y) ⊓ (z \ y ⊔ x)
[PROOFSTEP]
rw [inf_idem]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ z \ (x \ y) ⊓ z \ (y \ x) = (z \ x ⊔ z ⊓ x ⊓ y) ⊓ (z \ y ⊔ z ⊓ y ⊓ x)
[PROOFSTEP]
rw [sdiff_sdiff_right, sdiff_sdiff_right]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ (z \ x ⊔ z ⊓ x ⊓ y) ⊓ (z \ y ⊔ z ⊓ y ⊓ x) = (z \ x ⊔ z ⊓ y ⊓ x) ⊓ (z \ y ⊔ z ⊓ y ⊓ x)
[PROOFSTEP]
ac_rfl
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ z \ x ⊓ z \ y ⊔ z ⊓ y ⊓ x = z ⊓ x ⊓ y ⊔ z \ x ⊓ z \ y
[PROOFSTEP]
ac_rfl
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ x ⊓ y ⊓ z ⊔ x \ z ⊓ y \ z = (x ⊓ y ⊓ z ⊔ x \ z) ⊓ (x ⊓ y ⊓ z ⊔ y \ z)
[PROOFSTEP]
rw [sup_inf_left]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ (x ⊓ y ⊓ z ⊔ x \ z) ⊓ (x ⊓ y ⊓ z ⊔ y \ z) = (x ⊓ y ⊓ (z ⊔ x) ⊔ x \ z) ⊓ (x ⊓ y ⊓ z ⊔ y \ z)
[PROOFSTEP]
rw [sup_inf_right, sup_sdiff_self_right, inf_sup_right, inf_sdiff_sup_right]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ (x ⊓ y ⊓ (z ⊔ x) ⊔ x \ z) ⊓ (x ⊓ y ⊓ z ⊔ y \ z) = (y ⊓ (x ⊓ (x ⊔ z)) ⊔ x \ z) ⊓ (x ⊓ y ⊓ z ⊔ y \ z)
[PROOFSTEP]
ac_rfl
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ (y ⊓ (x ⊓ (x ⊔ z)) ⊔ x \ z) ⊓ (x ⊓ y ⊓ z ⊔ y \ z) = (y ⊓ x ⊔ x \ z) ⊓ (x ⊓ y ⊔ y \ z)
[PROOFSTEP]
rw [inf_sup_self, sup_inf_inf_sdiff]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ (y ⊓ x ⊔ x \ z) ⊓ (x ⊓ y ⊔ y \ z) = x ⊓ y ⊔ x \ z ⊓ y \ z
[PROOFSTEP]
rw [@inf_comm _ _ y, sup_inf_left]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ x ⊓ y ⊓ z ⊓ (x \ z ⊓ y \ z) = x ⊓ y ⊓ (z ⊓ x \ z) ⊓ y \ z
[PROOFSTEP]
ac_rfl
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ x ⊓ y ⊓ (z ⊓ x \ z) ⊓ y \ z = ⊥
[PROOFSTEP]
rw [inf_sdiff_self_right, inf_bot_eq, bot_inf_eq]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ x ⊓ y ⊓ z ⊔ x ⊓ y \ z = x ⊓ (y ⊓ z) ⊔ x ⊓ y \ z
[PROOFSTEP]
rw [inf_assoc]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ x ⊓ (y ⊓ z ⊔ y \ z) = x ⊓ y
[PROOFSTEP]
rw [sup_inf_sdiff]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ x ⊓ y ⊓ z ⊓ (x ⊓ y \ z) = x ⊓ x ⊓ (y ⊓ z ⊓ y \ z)
[PROOFSTEP]
ac_rfl
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ x ⊓ x ⊓ (y ⊓ z ⊓ y \ z) = ⊥
[PROOFSTEP]
rw [inf_inf_sdiff, inf_bot_eq]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ x \ z ⊓ y = (x ⊓ y) \ z
[PROOFSTEP]
rw [@inf_comm _ _ x, inf_comm, inf_sdiff_assoc]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
a b c : α
⊢ a ⊓ b \ c = (a ⊓ b) \ (a ⊓ c)
[PROOFSTEP]
rw [sdiff_inf, sdiff_eq_bot_iff.2 inf_le_left, bot_sup_eq, inf_sdiff_assoc]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
a b c : α
⊢ a \ b ⊓ c = (a ⊓ c) \ (b ⊓ c)
[PROOFSTEP]
simp_rw [@inf_comm _ _ _ c, inf_sdiff_distrib_left]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ Disjoint (x \ z) y ↔ Disjoint x (y \ z)
[PROOFSTEP]
simp_rw [disjoint_iff, inf_sdiff_right_comm, inf_sdiff_assoc]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ x \ y ⊔ y \ x ⊔ x ⊓ y = (x \ y ⊔ y \ x ⊔ x) ⊓ (x \ y ⊔ y \ x ⊔ y)
[PROOFSTEP]
rw [sup_inf_left]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ (x \ y ⊔ y \ x ⊔ x) ⊓ (x \ y ⊔ y \ x ⊔ y) = (x \ y ⊔ x ⊔ y \ x) ⊓ (x \ y ⊔ (y \ x ⊔ y))
[PROOFSTEP]
ac_rfl
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ (x \ y ⊔ x ⊔ y \ x) ⊓ (x \ y ⊔ (y \ x ⊔ y)) = (x ⊔ y \ x) ⊓ (x \ y ⊔ y)
[PROOFSTEP]
rw [sup_sdiff_right, sup_sdiff_right]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ (x ⊔ y \ x) ⊓ (x \ y ⊔ y) = x ⊔ y
[PROOFSTEP]
rw [sup_sdiff_self_right, sup_sdiff_self_left, inf_idem]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
h : y < z \ x
hxz : x ≤ z
⊢ x ⊔ y < z
[PROOFSTEP]
rw [← sup_sdiff_cancel_right hxz]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
h : y < z \ x
hxz : x ≤ z
⊢ x ⊔ y < x ⊔ z \ x
[PROOFSTEP]
refine' (sup_le_sup_left h.le _).lt_of_not_le fun h' => h.not_le _
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
h : y < z \ x
hxz : x ≤ z
h' : x ⊔ z \ x ≤ x ⊔ y
⊢ z \ x ≤ y
[PROOFSTEP]
rw [← sdiff_idem]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
h : y < z \ x
hxz : x ≤ z
h' : x ⊔ z \ x ≤ x ⊔ y
⊢ (z \ x) \ x ≤ y
[PROOFSTEP]
exact (sdiff_le_sdiff_of_sup_le_sup_left h').trans sdiff_le
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
h : x < z \ y
hyz : y ≤ z
⊢ x ⊔ y < z
[PROOFSTEP]
rw [← sdiff_sup_cancel hyz]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
h : x < z \ y
hyz : y ≤ z
⊢ x ⊔ y < z \ y ⊔ y
[PROOFSTEP]
refine' (sup_le_sup_right h.le _).lt_of_not_le fun h' => h.not_le _
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
h : x < z \ y
hyz : y ≤ z
h' : z \ y ⊔ y ≤ x ⊔ y
⊢ z \ y ≤ x
[PROOFSTEP]
rw [← sdiff_idem]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
h : x < z \ y
hyz : y ≤ z
h' : z \ y ⊔ y ≤ x ⊔ y
⊢ (z \ y) \ y ≤ x
[PROOFSTEP]
exact (sdiff_le_sdiff_of_sup_le_sup_right h').trans sdiff_le
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝¹ : GeneralizedBooleanAlgebra α
inst✝ : OrderTop α
src✝² : GeneralizedBooleanAlgebra α := inst✝¹
src✝¹ : OrderBot α := toOrderBot
src✝ : OrderTop α := inst✝
x✝¹ x✝ : α
⊢ x✝¹ \ x✝ = x✝¹ ⊓ x✝ᶜ
[PROOFSTEP]
erw [← inf_sdiff_assoc, inf_top_eq]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : BooleanAlgebra α
src✝ : BooleanAlgebra α := inst✝
a b : α
⊢ a ⊓ b ⊔ a \ b = a
[PROOFSTEP]
rw [sdiff_eq, ← inf_sup_left, sup_compl_eq_top, inf_top_eq]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : BooleanAlgebra α
src✝ : BooleanAlgebra α := inst✝
a b : α
⊢ a ⊓ b ⊓ a \ b = ⊥
[PROOFSTEP]
rw [sdiff_eq, ← inf_inf_distrib_left, inf_compl_eq_bot', inf_bot_eq]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : BooleanAlgebra α
src✝¹ : BooleanAlgebra α := inst✝
src✝ : GeneralizedCoheytingAlgebra α := GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra
a b c : α
⊢ a ≤ b ⇨ c ↔ a ⊓ b ≤ c
[PROOFSTEP]
rw [himp_eq, isCompl_compl.le_sup_right_iff_inf_left_le]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : BooleanAlgebra α
src✝¹ : BooleanAlgebra α := inst✝
src✝ : GeneralizedCoheytingAlgebra α := GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra
a : α
⊢ ⊤ \ a = ￢a
[PROOFSTEP]
rw [sdiff_eq, top_inf_eq]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : BooleanAlgebra α
src✝¹ : BooleanAlgebra α := inst✝
src✝ : GeneralizedCoheytingAlgebra α := GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra
a : α
⊢ aᶜ = ￢a
[PROOFSTEP]
rfl
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : BooleanAlgebra α
h : x = yᶜ
⊢ IsCompl x y
[PROOFSTEP]
rw [h]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : BooleanAlgebra α
h : x = yᶜ
⊢ IsCompl yᶜ y
[PROOFSTEP]
exact isCompl_compl.symm
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : BooleanAlgebra α
h : xᶜ = y
⊢ IsCompl x y
[PROOFSTEP]
rw [← h]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : BooleanAlgebra α
h : xᶜ = y
⊢ IsCompl x xᶜ
[PROOFSTEP]
exact isCompl_compl
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : BooleanAlgebra α
⊢ xᶜ = y ↔ yᶜ = x
[PROOFSTEP]
rw [eq_comm, compl_eq_iff_isCompl, eq_compl_iff_isCompl]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : BooleanAlgebra α
⊢ x = yᶜ ↔ y = xᶜ
[PROOFSTEP]
rw [eq_comm, compl_eq_iff_isCompl, eq_compl_iff_isCompl]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : BooleanAlgebra α
h : yᶜ ≤ xᶜ
⊢ x ≤ y
[PROOFSTEP]
have h := compl_le_compl h
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : BooleanAlgebra α
h✝ : yᶜ ≤ xᶜ
h : xᶜᶜ ≤ yᶜᶜ
⊢ x ≤ y
[PROOFSTEP]
simp at h
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : BooleanAlgebra α
h✝ : yᶜ ≤ xᶜ
h : x ≤ y
⊢ x ≤ y
[PROOFSTEP]
assumption
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : BooleanAlgebra α
h : yᶜ ≤ x
⊢ xᶜ ≤ y
[PROOFSTEP]
simpa only [compl_compl] using compl_le_compl h
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : BooleanAlgebra α
⊢ xᶜ ≤ x ↔ x = ⊤
[PROOFSTEP]
simpa using le_compl_self (a := xᶜ)
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝¹ : BooleanAlgebra α
inst✝ : Nontrivial α
⊢ xᶜ < x ↔ x = ⊤
[PROOFSTEP]
simpa using lt_compl_self (a := xᶜ)
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : BooleanAlgebra α
⊢ x \ yᶜ = x ⊓ y
[PROOFSTEP]
rw [sdiff_eq, compl_compl]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : BooleanAlgebra α
⊢ x ⊓ y ⊔ x ⊓ yᶜ = x
[PROOFSTEP]
rw [← sdiff_eq, sup_inf_sdiff _ _]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : BooleanAlgebra α
⊢ (x \ y)ᶜ = x ⇨ y
[PROOFSTEP]
rw [sdiff_eq, himp_eq, compl_inf, compl_compl, sup_comm]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : BooleanAlgebra α
⊢ xᶜ \ yᶜ = y \ x
[PROOFSTEP]
rw [sdiff_compl, sdiff_eq, inf_comm]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : BooleanAlgebra α
⊢ Disjoint xᶜ y ↔ y ≤ x
[PROOFSTEP]
rw [← le_compl_iff_disjoint_left, compl_compl]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝ : BooleanAlgebra α
⊢ Disjoint x yᶜ ↔ x ≤ y
[PROOFSTEP]
rw [← le_compl_iff_disjoint_right, compl_compl]
[GOAL]
α✝ : Type u
β✝ : Type u_1
w x✝ y z : α✝
α : Type ?u.67933
β : Type ?u.67936
inst✝¹ : BooleanAlgebra α
inst✝ : BooleanAlgebra β
src✝¹ : HeytingAlgebra (α × β) := heytingAlgebra
src✝ : DistribLattice (α × β) := distribLattice α β
x : α × β
⊢ x ⊓ xᶜ ≤ ⊥
[PROOFSTEP]
constructor
[GOAL]
case left
α✝ : Type u
β✝ : Type u_1
w x✝ y z : α✝
α : Type ?u.67933
β : Type ?u.67936
inst✝¹ : BooleanAlgebra α
inst✝ : BooleanAlgebra β
src✝¹ : HeytingAlgebra (α × β) := heytingAlgebra
src✝ : DistribLattice (α × β) := distribLattice α β
x : α × β
⊢ (x ⊓ xᶜ).fst ≤ ⊥.fst
[PROOFSTEP]
simp
[GOAL]
case right
α✝ : Type u
β✝ : Type u_1
w x✝ y z : α✝
α : Type ?u.67933
β : Type ?u.67936
inst✝¹ : BooleanAlgebra α
inst✝ : BooleanAlgebra β
src✝¹ : HeytingAlgebra (α × β) := heytingAlgebra
src✝ : DistribLattice (α × β) := distribLattice α β
x : α × β
⊢ (x ⊓ xᶜ).snd ≤ ⊥.snd
[PROOFSTEP]
simp
[GOAL]
α✝ : Type u
β✝ : Type u_1
w x✝ y z : α✝
α : Type ?u.67933
β : Type ?u.67936
inst✝¹ : BooleanAlgebra α
inst✝ : BooleanAlgebra β
src✝¹ : HeytingAlgebra (α × β) := heytingAlgebra
src✝ : DistribLattice (α × β) := distribLattice α β
x : α × β
⊢ ⊤ ≤ x ⊔ xᶜ
[PROOFSTEP]
constructor
[GOAL]
case left
α✝ : Type u
β✝ : Type u_1
w x✝ y z : α✝
α : Type ?u.67933
β : Type ?u.67936
inst✝¹ : BooleanAlgebra α
inst✝ : BooleanAlgebra β
src✝¹ : HeytingAlgebra (α × β) := heytingAlgebra
src✝ : DistribLattice (α × β) := distribLattice α β
x : α × β
⊢ ⊤.fst ≤ (x ⊔ xᶜ).fst
[PROOFSTEP]
simp
[GOAL]
case right
α✝ : Type u
β✝ : Type u_1
w x✝ y z : α✝
α : Type ?u.67933
β : Type ?u.67936
inst✝¹ : BooleanAlgebra α
inst✝ : BooleanAlgebra β
src✝¹ : HeytingAlgebra (α × β) := heytingAlgebra
src✝ : DistribLattice (α × β) := distribLattice α β
x : α × β
⊢ ⊤.snd ≤ (x ⊔ xᶜ).snd
[PROOFSTEP]
simp
[GOAL]
α✝ : Type u
β✝ : Type u_1
w x✝ y✝ z : α✝
α : Type ?u.67933
β : Type ?u.67936
inst✝¹ : BooleanAlgebra α
inst✝ : BooleanAlgebra β
src✝¹ : HeytingAlgebra (α × β) := heytingAlgebra
src✝ : DistribLattice (α × β) := distribLattice α β
x y : α × β
⊢ x \ y = x ⊓ yᶜ
[PROOFSTEP]
ext
[GOAL]
case h₁
α✝ : Type u
β✝ : Type u_1
w x✝ y✝ z : α✝
α : Type ?u.67933
β : Type ?u.67936
inst✝¹ : BooleanAlgebra α
inst✝ : BooleanAlgebra β
src✝¹ : HeytingAlgebra (α × β) := heytingAlgebra
src✝ : DistribLattice (α × β) := distribLattice α β
x y : α × β
⊢ (x \ y).fst = (x ⊓ yᶜ).fst
[PROOFSTEP]
simp [sdiff_eq]
[GOAL]
case h₂
α✝ : Type u
β✝ : Type u_1
w x✝ y✝ z : α✝
α : Type ?u.67933
β : Type ?u.67936
inst✝¹ : BooleanAlgebra α
inst✝ : BooleanAlgebra β
src✝¹ : HeytingAlgebra (α × β) := heytingAlgebra
src✝ : DistribLattice (α × β) := distribLattice α β
x y : α × β
⊢ (x \ y).snd = (x ⊓ yᶜ).snd
[PROOFSTEP]
simp [sdiff_eq]
[GOAL]
α✝ : Type u
β✝ : Type u_1
w x✝ y✝ z : α✝
α : Type ?u.67933
β : Type ?u.67936
inst✝¹ : BooleanAlgebra α
inst✝ : BooleanAlgebra β
src✝¹ : HeytingAlgebra (α × β) := heytingAlgebra
src✝ : DistribLattice (α × β) := distribLattice α β
x y : α × β
⊢ x ⇨ y = y ⊔ xᶜ
[PROOFSTEP]
ext
[GOAL]
case h₁
α✝ : Type u
β✝ : Type u_1
w x✝ y✝ z : α✝
α : Type ?u.67933
β : Type ?u.67936
inst✝¹ : BooleanAlgebra α
inst✝ : BooleanAlgebra β
src✝¹ : HeytingAlgebra (α × β) := heytingAlgebra
src✝ : DistribLattice (α × β) := distribLattice α β
x y : α × β
⊢ (x ⇨ y).fst = (y ⊔ xᶜ).fst
[PROOFSTEP]
simp [himp_eq]
[GOAL]
case h₂
α✝ : Type u
β✝ : Type u_1
w x✝ y✝ z : α✝
α : Type ?u.67933
β : Type ?u.67936
inst✝¹ : BooleanAlgebra α
inst✝ : BooleanAlgebra β
src✝¹ : HeytingAlgebra (α × β) := heytingAlgebra
src✝ : DistribLattice (α × β) := distribLattice α β
x y : α × β
⊢ (x ⇨ y).snd = (y ⊔ xᶜ).snd
[PROOFSTEP]
simp [himp_eq]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
src✝¹ : LinearOrder Bool := Bool.linearOrder
src✝ : BoundedOrder Bool := Bool.boundedOrder
⊢ ∀ (x y z : Bool), (x ⊔ y) ⊓ (x ⊔ z) ≤ x ⊔ y ⊓ z
[PROOFSTEP]
decide
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝⁴ : Sup α
inst✝³ : Inf α
inst✝² : Bot α
inst✝¹ : SDiff α
inst✝ : GeneralizedBooleanAlgebra β
f : α → β
hf : Injective f
map_sup : ∀ (a b : α), f (a ⊔ b) = f a ⊔ f b
map_inf : ∀ (a b : α), f (a ⊓ b) = f a ⊓ f b
map_bot : f ⊥ = ⊥
map_sdiff : ∀ (a b : α), f (a \ b) = f a \ f b
src✝¹ : GeneralizedCoheytingAlgebra α := Injective.generalizedCoheytingAlgebra f hf map_sup map_inf map_bot map_sdiff
src✝ : DistribLattice α := Injective.distribLattice f hf map_sup map_inf
a b : α
⊢ f (a ⊓ b ⊔ a \ b) = f a
[PROOFSTEP]
erw [map_sup, map_sdiff, map_inf, sup_inf_sdiff]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝⁴ : Sup α
inst✝³ : Inf α
inst✝² : Bot α
inst✝¹ : SDiff α
inst✝ : GeneralizedBooleanAlgebra β
f : α → β
hf : Injective f
map_sup : ∀ (a b : α), f (a ⊔ b) = f a ⊔ f b
map_inf : ∀ (a b : α), f (a ⊓ b) = f a ⊓ f b
map_bot : f ⊥ = ⊥
map_sdiff : ∀ (a b : α), f (a \ b) = f a \ f b
src✝¹ : GeneralizedCoheytingAlgebra α := Injective.generalizedCoheytingAlgebra f hf map_sup map_inf map_bot map_sdiff
src✝ : DistribLattice α := Injective.distribLattice f hf map_sup map_inf
a b : α
⊢ f (a ⊓ b ⊓ a \ b) = f ⊥
[PROOFSTEP]
erw [map_inf, map_sdiff, map_inf, inf_inf_sdiff, map_bot]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝⁶ : Sup α
inst✝⁵ : Inf α
inst✝⁴ : Top α
inst✝³ : Bot α
inst✝² : HasCompl α
inst✝¹ : SDiff α
inst✝ : BooleanAlgebra β
f : α → β
hf : Injective f
map_sup : ∀ (a b : α), f (a ⊔ b) = f a ⊔ f b
map_inf : ∀ (a b : α), f (a ⊓ b) = f a ⊓ f b
map_top : f ⊤ = ⊤
map_bot : f ⊥ = ⊥
map_compl : ∀ (a : α), f aᶜ = (f a)ᶜ
map_sdiff : ∀ (a b : α), f (a \ b) = f a \ f b
src✝ : GeneralizedBooleanAlgebra α := Injective.generalizedBooleanAlgebra f hf map_sup map_inf map_bot map_sdiff
a : α
⊢ f a ⊓ f aᶜ = f ⊥
[PROOFSTEP]
rw [map_compl, inf_compl_eq_bot, map_bot]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝⁶ : Sup α
inst✝⁵ : Inf α
inst✝⁴ : Top α
inst✝³ : Bot α
inst✝² : HasCompl α
inst✝¹ : SDiff α
inst✝ : BooleanAlgebra β
f : α → β
hf : Injective f
map_sup : ∀ (a b : α), f (a ⊔ b) = f a ⊔ f b
map_inf : ∀ (a b : α), f (a ⊓ b) = f a ⊓ f b
map_top : f ⊤ = ⊤
map_bot : f ⊥ = ⊥
map_compl : ∀ (a : α), f aᶜ = (f a)ᶜ
map_sdiff : ∀ (a b : α), f (a \ b) = f a \ f b
src✝ : GeneralizedBooleanAlgebra α := Injective.generalizedBooleanAlgebra f hf map_sup map_inf map_bot map_sdiff
a : α
⊢ f a ⊔ f aᶜ = f ⊤
[PROOFSTEP]
rw [map_compl, sup_compl_eq_top, map_top]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝⁶ : Sup α
inst✝⁵ : Inf α
inst✝⁴ : Top α
inst✝³ : Bot α
inst✝² : HasCompl α
inst✝¹ : SDiff α
inst✝ : BooleanAlgebra β
f : α → β
hf : Injective f
map_sup : ∀ (a b : α), f (a ⊔ b) = f a ⊔ f b
map_inf : ∀ (a b : α), f (a ⊓ b) = f a ⊓ f b
map_top : f ⊤ = ⊤
map_bot : f ⊥ = ⊥
map_compl : ∀ (a : α), f aᶜ = (f a)ᶜ
map_sdiff : ∀ (a b : α), f (a \ b) = f a \ f b
src✝ : GeneralizedBooleanAlgebra α := Injective.generalizedBooleanAlgebra f hf map_sup map_inf map_bot map_sdiff
a b : α
⊢ a \ b = a ⊓ bᶜ
[PROOFSTEP]
refine hf ((map_sdiff _ _).trans (sdiff_eq.trans ?_))
[GOAL]
α : Type u
β : Type u_1
w x y z : α
inst✝⁶ : Sup α
inst✝⁵ : Inf α
inst✝⁴ : Top α
inst✝³ : Bot α
inst✝² : HasCompl α
inst✝¹ : SDiff α
inst✝ : BooleanAlgebra β
f : α → β
hf : Injective f
map_sup : ∀ (a b : α), f (a ⊔ b) = f a ⊔ f b
map_inf : ∀ (a b : α), f (a ⊓ b) = f a ⊓ f b
map_top : f ⊤ = ⊤
map_bot : f ⊥ = ⊥
map_compl : ∀ (a : α), f aᶜ = (f a)ᶜ
map_sdiff : ∀ (a b : α), f (a \ b) = f a \ f b
src✝ : GeneralizedBooleanAlgebra α := Injective.generalizedBooleanAlgebra f hf map_sup map_inf map_bot map_sdiff
a b : α
⊢ f a ⊓ (f b)ᶜ = f (a ⊓ bᶜ)
[PROOFSTEP]
rw [map_inf, map_compl]
[GOAL]
α : Type u
β : Type u_1
w x y z : α
⊢ BooleanAlgebra PUnit
[PROOFSTEP]
refine' { PUnit.biheytingAlgebra with .. }
[GOAL]
case refine'_1
α : Type u
β : Type u_1
w x y z : α
src✝ : BiheytingAlgebra PUnit := biheytingAlgebra
⊢ ∀ (x y z : PUnit), (x ⊔ y) ⊓ (x ⊔ z) ≤ x ⊔ y ⊓ z
[PROOFSTEP]
intros
[GOAL]
case refine'_1
α : Type u
β : Type u_1
w x y z : α
src✝ : BiheytingAlgebra PUnit := biheytingAlgebra
x✝ y✝ z✝ : PUnit
⊢ (x✝ ⊔ y✝) ⊓ (x✝ ⊔ z✝) ≤ x✝ ⊔ y✝ ⊓ z✝
[PROOFSTEP]
trivial
[GOAL]
case refine'_2
α : Type u
β : Type u_1
w x y z : α
src✝ : BiheytingAlgebra PUnit := biheytingAlgebra
⊢ ∀ (x : PUnit), x ⊓ xᶜ ≤ ⊥
[PROOFSTEP]
intros
[GOAL]
case refine'_2
α : Type u
β : Type u_1
w x y z : α
src✝ : BiheytingAlgebra PUnit := biheytingAlgebra
x✝ : PUnit
⊢ x✝ ⊓ x✝ᶜ ≤ ⊥
[PROOFSTEP]
trivial
[GOAL]
case refine'_3
α : Type u
β : Type u_1
w x y z : α
src✝ : BiheytingAlgebra PUnit := biheytingAlgebra
⊢ ∀ (x : PUnit), ⊤ ≤ x ⊔ xᶜ
[PROOFSTEP]
intros
[GOAL]
case refine'_3
α : Type u
β : Type u_1
w x y z : α
src✝ : BiheytingAlgebra PUnit := biheytingAlgebra
x✝ : PUnit
⊢ ⊤ ≤ x✝ ⊔ x✝ᶜ
[PROOFSTEP]
trivial
[GOAL]
case refine'_4
α : Type u
β : Type u_1
w x y z : α
src✝ : BiheytingAlgebra PUnit := biheytingAlgebra
⊢ ∀ (x y : PUnit), x \ y = x ⊓ yᶜ
[PROOFSTEP]
intros
[GOAL]
case refine'_4
α : Type u
β : Type u_1
w x y z : α
src✝ : BiheytingAlgebra PUnit := biheytingAlgebra
x✝ y✝ : PUnit
⊢ x✝ \ y✝ = x✝ ⊓ y✝ᶜ
[PROOFSTEP]
trivial
[GOAL]
case refine'_5
α : Type u
β : Type u_1
w x y z : α
src✝ : BiheytingAlgebra PUnit := biheytingAlgebra
⊢ ∀ (x y : PUnit), x ⇨ y = y ⊔ xᶜ
[PROOFSTEP]
intros
[GOAL]
case refine'_5
α : Type u
β : Type u_1
w x y z : α
src✝ : BiheytingAlgebra PUnit := biheytingAlgebra
x✝ y✝ : PUnit
⊢ x✝ ⇨ y✝ = y✝ ⊔ x✝ᶜ
[PROOFSTEP]
trivial