l3lab/ntp-mathlib huggingface dataset:
/-- Pullback a `GeneralizedCoheytingAlgebra` along an injection. -/
@[reducible]
protected def Function.Injective.generalizedCoheytingAlgebra [Sup α] [Inf α] [Bot α]
    [SDiff α] [GeneralizedCoheytingAlgebra β] (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) :
    GeneralizedCoheytingAlgebra α :=
  { hf.lattice f map_sup map_inf, ‹Bot α›, ‹SDiff α› with
    bot_le := fun a => by
      

Proof state:
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝⁴ : Sup α
inst✝³ : Inf α
inst✝² : Bot α
inst✝¹ : SDiff α
inst✝ : GeneralizedCoheytingAlgebra β
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✝² : Lattice α := Injective.lattice f hf map_sup map_inf
src✝¹ : Bot α := inst✝²
src✝ : SDiff α := inst✝¹
a : α
⊢ ⊥ ≤ a

Next tactic:
change f _ ≤ _
/-- Pullback a `GeneralizedCoheytingAlgebra` along an injection. -/
@[reducible]
protected def Function.Injective.generalizedCoheytingAlgebra [Sup α] [Inf α] [Bot α]
    [SDiff α] [GeneralizedCoheytingAlgebra β] (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) :
    GeneralizedCoheytingAlgebra α :=
  { hf.lattice f map_sup map_inf, ‹Bot α›, ‹SDiff α› with
    bot_le := fun a => by
      change f _ ≤ _
      

Proof state:
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝⁴ : Sup α
inst✝³ : Inf α
inst✝² : Bot α
inst✝¹ : SDiff α
inst✝ : GeneralizedCoheytingAlgebra β
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✝² : Lattice α := Injective.lattice f hf map_sup map_inf
src✝¹ : Bot α := inst✝²
src✝ : SDiff α := inst✝¹
a : α
⊢ f ⊥ ≤ f a

Next tactic:
rw [map_bot]
/-- Pullback a `GeneralizedCoheytingAlgebra` along an injection. -/
@[reducible]
protected def Function.Injective.generalizedCoheytingAlgebra [Sup α] [Inf α] [Bot α]
    [SDiff α] [GeneralizedCoheytingAlgebra β] (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) :
    GeneralizedCoheytingAlgebra α :=
  { hf.lattice f map_sup map_inf, ‹Bot α›, ‹SDiff α› with
    bot_le := fun a => by
      change f _ ≤ _
      rw [map_bot]
      

Proof state:
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝⁴ : Sup α
inst✝³ : Inf α
inst✝² : Bot α
inst✝¹ : SDiff α
inst✝ : GeneralizedCoheytingAlgebra β
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✝² : Lattice α := Injective.lattice f hf map_sup map_inf
src✝¹ : Bot α := inst✝²
src✝ : SDiff α := inst✝¹
a : α
⊢ ⊥ ≤ f a

Next tactic:
exact bot_le
/-- Pullback a `GeneralizedCoheytingAlgebra` along an injection. -/
@[reducible]
protected def Function.Injective.generalizedCoheytingAlgebra [Sup α] [Inf α] [Bot α]
    [SDiff α] [GeneralizedCoheytingAlgebra β] (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) :
    GeneralizedCoheytingAlgebra α :=
  { hf.lattice f map_sup map_inf, ‹Bot α›, ‹SDiff α› with
    bot_le := fun a => by
      change f _ ≤ _
      rw [map_bot]
      exact bot_le,
    sdiff_le_iff := fun a b c => by
      

Proof state:
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝⁴ : Sup α
inst✝³ : Inf α
inst✝² : Bot α
inst✝¹ : SDiff α
inst✝ : GeneralizedCoheytingAlgebra β
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✝² : Lattice α := Injective.lattice f hf map_sup map_inf
src✝¹ : Bot α := inst✝²
src✝ : SDiff α := inst✝¹
a b c : α
⊢ a \ b ≤ c ↔ a ≤ b ⊔ c

Next tactic:
change f _ ≤ _ ↔ f _ ≤ _
/-- Pullback a `GeneralizedCoheytingAlgebra` along an injection. -/
@[reducible]
protected def Function.Injective.generalizedCoheytingAlgebra [Sup α] [Inf α] [Bot α]
    [SDiff α] [GeneralizedCoheytingAlgebra β] (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) :
    GeneralizedCoheytingAlgebra α :=
  { hf.lattice f map_sup map_inf, ‹Bot α›, ‹SDiff α› with
    bot_le := fun a => by
      change f _ ≤ _
      rw [map_bot]
      exact bot_le,
    sdiff_le_iff := fun a b c => by
      change f _ ≤ _ ↔ f _ ≤ _
      

Proof state:
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝⁴ : Sup α
inst✝³ : Inf α
inst✝² : Bot α
inst✝¹ : SDiff α
inst✝ : GeneralizedCoheytingAlgebra β
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✝² : Lattice α := Injective.lattice f hf map_sup map_inf
src✝¹ : Bot α := inst✝²
src✝ : SDiff α := inst✝¹
a b c : α
⊢ f (a \ b) ≤ f c ↔ f a ≤ f (b ⊔ c)

Next tactic:
erw [map_sdiff, map_sup, sdiff_le_iff]
/-- Pullback a `HeytingAlgebra` along an injection. -/
@[reducible]
protected def Function.Injective.heytingAlgebra [Sup α] [Inf α] [Top α] [Bot α]
    [HasCompl α] [HImp α] [HeytingAlgebra β] (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_himp : ∀ a b, f (a ⇨ b) = f a ⇨ f b) : HeytingAlgebra α :=
  { hf.generalizedHeytingAlgebra f map_sup map_inf map_top map_himp, ‹Bot α›, ‹HasCompl α› with
    bot_le := fun a => by
      

Proof state:
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝⁶ : Sup α
inst✝⁵ : Inf α
inst✝⁴ : Top α
inst✝³ : Bot α
inst✝² : HasCompl α
inst✝¹ : HImp α
inst✝ : HeytingAlgebra β
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_himp : ∀ (a b : α), f (a ⇨ b) = f a ⇨ f b
src✝² : GeneralizedHeytingAlgebra α := Injective.generalizedHeytingAlgebra f hf map_sup map_inf map_top map_himp
src✝¹ : Bot α := inst✝³
src✝ : HasCompl α := inst✝²
a : α
⊢ ⊥ ≤ a

Next tactic:
change f _ ≤ _
/-- Pullback a `HeytingAlgebra` along an injection. -/
@[reducible]
protected def Function.Injective.heytingAlgebra [Sup α] [Inf α] [Top α] [Bot α]
    [HasCompl α] [HImp α] [HeytingAlgebra β] (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_himp : ∀ a b, f (a ⇨ b) = f a ⇨ f b) : HeytingAlgebra α :=
  { hf.generalizedHeytingAlgebra f map_sup map_inf map_top map_himp, ‹Bot α›, ‹HasCompl α› with
    bot_le := fun a => by
      change f _ ≤ _
      

Proof state:
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝⁶ : Sup α
inst✝⁵ : Inf α
inst✝⁴ : Top α
inst✝³ : Bot α
inst✝² : HasCompl α
inst✝¹ : HImp α
inst✝ : HeytingAlgebra β
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_himp : ∀ (a b : α), f (a ⇨ b) = f a ⇨ f b
src✝² : GeneralizedHeytingAlgebra α := Injective.generalizedHeytingAlgebra f hf map_sup map_inf map_top map_himp
src✝¹ : Bot α := inst✝³
src✝ : HasCompl α := inst✝²
a : α
⊢ f ⊥ ≤ f a

Next tactic:
rw [map_bot]
/-- Pullback a `HeytingAlgebra` along an injection. -/
@[reducible]
protected def Function.Injective.heytingAlgebra [Sup α] [Inf α] [Top α] [Bot α]
    [HasCompl α] [HImp α] [HeytingAlgebra β] (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_himp : ∀ a b, f (a ⇨ b) = f a ⇨ f b) : HeytingAlgebra α :=
  { hf.generalizedHeytingAlgebra f map_sup map_inf map_top map_himp, ‹Bot α›, ‹HasCompl α› with
    bot_le := fun a => by
      change f _ ≤ _
      rw [map_bot]
      

Proof state:
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝⁶ : Sup α
inst✝⁵ : Inf α
inst✝⁴ : Top α
inst✝³ : Bot α
inst✝² : HasCompl α
inst✝¹ : HImp α
inst✝ : HeytingAlgebra β
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_himp : ∀ (a b : α), f (a ⇨ b) = f a ⇨ f b
src✝² : GeneralizedHeytingAlgebra α := Injective.generalizedHeytingAlgebra f hf map_sup map_inf map_top map_himp
src✝¹ : Bot α := inst✝³
src✝ : HasCompl α := inst✝²
a : α
⊢ ⊥ ≤ f a

Next tactic:
exact bot_le
/-- Pullback a `HeytingAlgebra` along an injection. -/
@[reducible]
protected def Function.Injective.heytingAlgebra [Sup α] [Inf α] [Top α] [Bot α]
    [HasCompl α] [HImp α] [HeytingAlgebra β] (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_himp : ∀ a b, f (a ⇨ b) = f a ⇨ f b) : HeytingAlgebra α :=
  { hf.generalizedHeytingAlgebra f map_sup map_inf map_top map_himp, ‹Bot α›, ‹HasCompl α› with
    bot_le := fun a => by
      change f _ ≤ _
      rw [map_bot]
      exact bot_le,
    himp_bot := fun a => hf <| by 

Proof state:
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝⁶ : Sup α
inst✝⁵ : Inf α
inst✝⁴ : Top α
inst✝³ : Bot α
inst✝² : HasCompl α
inst✝¹ : HImp α
inst✝ : HeytingAlgebra β
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_himp : ∀ (a b : α), f (a ⇨ b) = f a ⇨ f b
src✝² : GeneralizedHeytingAlgebra α := Injective.generalizedHeytingAlgebra f hf map_sup map_inf map_top map_himp
src✝¹ : Bot α := inst✝³
src✝ : HasCompl α := inst✝²
a : α
⊢ f (a ⇨ ⊥) = f aᶜ

Next tactic:
erw [map_himp, map_compl, map_bot, himp_bot]
/-- Pullback a `CoheytingAlgebra` along an injection. -/
@[reducible]
protected def Function.Injective.coheytingAlgebra [Sup α] [Inf α] [Top α] [Bot α]
    [HNot α] [SDiff α] [CoheytingAlgebra β] (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_hnot : ∀ a, f (￢a) = ￢f a)
    (map_sdiff : ∀ a b, f (a \ b) = f a \ f b) : CoheytingAlgebra α :=
  { hf.generalizedCoheytingAlgebra f map_sup map_inf map_bot map_sdiff, ‹Top α›, ‹HNot α› with
    le_top := fun a => by
      

Proof state:
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝⁶ : Sup α
inst✝⁵ : Inf α
inst✝⁴ : Top α
inst✝³ : Bot α
inst✝² : HNot α
inst✝¹ : SDiff α
inst✝ : CoheytingAlgebra β
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_hnot : ∀ (a : α), f (￢a) = ￢f a
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✝¹ : Top α := inst✝⁴
src✝ : HNot α := inst✝²
a : α
⊢ a ≤ ⊤

Next tactic:
change f _ ≤ _
/-- Pullback a `CoheytingAlgebra` along an injection. -/
@[reducible]
protected def Function.Injective.coheytingAlgebra [Sup α] [Inf α] [Top α] [Bot α]
    [HNot α] [SDiff α] [CoheytingAlgebra β] (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_hnot : ∀ a, f (￢a) = ￢f a)
    (map_sdiff : ∀ a b, f (a \ b) = f a \ f b) : CoheytingAlgebra α :=
  { hf.generalizedCoheytingAlgebra f map_sup map_inf map_bot map_sdiff, ‹Top α›, ‹HNot α› with
    le_top := fun a => by
      change f _ ≤ _
      

Proof state:
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝⁶ : Sup α
inst✝⁵ : Inf α
inst✝⁴ : Top α
inst✝³ : Bot α
inst✝² : HNot α
inst✝¹ : SDiff α
inst✝ : CoheytingAlgebra β
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_hnot : ∀ (a : α), f (￢a) = ￢f a
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✝¹ : Top α := inst✝⁴
src✝ : HNot α := inst✝²
a : α
⊢ f a ≤ f ⊤

Next tactic:
rw [map_top]
/-- Pullback a `CoheytingAlgebra` along an injection. -/
@[reducible]
protected def Function.Injective.coheytingAlgebra [Sup α] [Inf α] [Top α] [Bot α]
    [HNot α] [SDiff α] [CoheytingAlgebra β] (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_hnot : ∀ a, f (￢a) = ￢f a)
    (map_sdiff : ∀ a b, f (a \ b) = f a \ f b) : CoheytingAlgebra α :=
  { hf.generalizedCoheytingAlgebra f map_sup map_inf map_bot map_sdiff, ‹Top α›, ‹HNot α› with
    le_top := fun a => by
      change f _ ≤ _
      rw [map_top]
      

Proof state:
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝⁶ : Sup α
inst✝⁵ : Inf α
inst✝⁴ : Top α
inst✝³ : Bot α
inst✝² : HNot α
inst✝¹ : SDiff α
inst✝ : CoheytingAlgebra β
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_hnot : ∀ (a : α), f (￢a) = ￢f a
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✝¹ : Top α := inst✝⁴
src✝ : HNot α := inst✝²
a : α
⊢ f a ≤ ⊤

Next tactic:
exact le_top
/-- Pullback a `CoheytingAlgebra` along an injection. -/
@[reducible]
protected def Function.Injective.coheytingAlgebra [Sup α] [Inf α] [Top α] [Bot α]
    [HNot α] [SDiff α] [CoheytingAlgebra β] (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_hnot : ∀ a, f (￢a) = ￢f a)
    (map_sdiff : ∀ a b, f (a \ b) = f a \ f b) : CoheytingAlgebra α :=
  { hf.generalizedCoheytingAlgebra f map_sup map_inf map_bot map_sdiff, ‹Top α›, ‹HNot α› with
    le_top := fun a => by
      change f _ ≤ _
      rw [map_top]
      exact le_top,
    top_sdiff := fun a => hf <| by 

Proof state:
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝⁶ : Sup α
inst✝⁵ : Inf α
inst✝⁴ : Top α
inst✝³ : Bot α
inst✝² : HNot α
inst✝¹ : SDiff α
inst✝ : CoheytingAlgebra β
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_hnot : ∀ (a : α), f (￢a) = ￢f a
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✝¹ : Top α := inst✝⁴
src✝ : HNot α := inst✝²
a : α
⊢ f (⊤ \ a) = f (￢a)

Next tactic:
erw [map_sdiff, map_hnot, map_top, top_sdiff']
theorem unitary.spectrum_subset_circle (u : unitary E) :
    spectrum 𝕜 (u : E) ⊆ Metric.sphere 0 1 := by
  

Proof state:
𝕜 : Type u_1
inst✝⁵ : NormedField 𝕜
E : Type u_2
inst✝⁴ : NormedRing E
inst✝³ : StarRing E
inst✝² : CstarRing E
inst✝¹ : NormedAlgebra 𝕜 E
inst✝ : CompleteSpace E
u : ↥(unitary E)
⊢ spectrum 𝕜 ↑u ⊆ Metric.sphere 0 1

Next tactic:
nontriviality E
theorem unitary.spectrum_subset_circle (u : unitary E) :
    spectrum 𝕜 (u : E) ⊆ Metric.sphere 0 1 := by
  nontriviality E
  

Proof state:
𝕜 : Type u_1
inst✝⁵ : NormedField 𝕜
E : Type u_2
inst✝⁴ : NormedRing E
inst✝³ : StarRing E
inst✝² : CstarRing E
inst✝¹ : NormedAlgebra 𝕜 E
inst✝ : CompleteSpace E
u : ↥(unitary E)
✝ : Nontrivial E
⊢ spectrum 𝕜 ↑u ⊆ Metric.sphere 0 1

Next tactic:
refine' fun k hk => mem_sphere_zero_iff_norm.mpr (le_antisymm _ _)
theorem unitary.spectrum_subset_circle (u : unitary E) :
    spectrum 𝕜 (u : E) ⊆ Metric.sphere 0 1 := by
  nontriviality E
  refine' fun k hk => mem_sphere_zero_iff_norm.mpr (le_antisymm _ _)
  · 

Proof state:
case refine'_1
𝕜 : Type u_1
inst✝⁵ : NormedField 𝕜
E : Type u_2
inst✝⁴ : NormedRing E
inst✝³ : StarRing E
inst✝² : CstarRing E
inst✝¹ : NormedAlgebra 𝕜 E
inst✝ : CompleteSpace E
u : ↥(unitary E)
✝ : Nontrivial E
k : 𝕜
hk : k ∈ spectrum 𝕜 ↑u
⊢ ‖k‖ ≤ 1

Next tactic:
simpa only [CstarRing.norm_coe_unitary u] using norm_le_norm_of_mem hk
theorem unitary.spectrum_subset_circle (u : unitary E) :
    spectrum 𝕜 (u : E) ⊆ Metric.sphere 0 1 := by
  nontriviality E
  refine' fun k hk => mem_sphere_zero_iff_norm.mpr (le_antisymm _ _)
  · simpa only [CstarRing.norm_coe_unitary u] using norm_le_norm_of_mem hk
  · 

Proof state:
case refine'_2
𝕜 : Type u_1
inst✝⁵ : NormedField 𝕜
E : Type u_2
inst✝⁴ : NormedRing E
inst✝³ : StarRing E
inst✝² : CstarRing E
inst✝¹ : NormedAlgebra 𝕜 E
inst✝ : CompleteSpace E
u : ↥(unitary E)
✝ : Nontrivial E
k : 𝕜
hk : k ∈ spectrum 𝕜 ↑u
⊢ 1 ≤ ‖k‖

Next tactic:
rw [← unitary.val_toUnits_apply u] at hk
theorem unitary.spectrum_subset_circle (u : unitary E) :
    spectrum 𝕜 (u : E) ⊆ Metric.sphere 0 1 := by
  nontriviality E
  refine' fun k hk => mem_sphere_zero_iff_norm.mpr (le_antisymm _ _)
  · simpa only [CstarRing.norm_coe_unitary u] using norm_le_norm_of_mem hk
  · rw [← unitary.val_toUnits_apply u] at hk
    

Proof state:
case refine'_2
𝕜 : Type u_1
inst✝⁵ : NormedField 𝕜
E : Type u_2
inst✝⁴ : NormedRing E
inst✝³ : StarRing E
inst✝² : CstarRing E
inst✝¹ : NormedAlgebra 𝕜 E
inst✝ : CompleteSpace E
u : ↥(unitary E)
✝ : Nontrivial E
k : 𝕜
hk : k ∈ spectrum 𝕜 ↑(toUnits u)
⊢ 1 ≤ ‖k‖

Next tactic:
have hnk := ne_zero_of_mem_of_unit hk
theorem unitary.spectrum_subset_circle (u : unitary E) :
    spectrum 𝕜 (u : E) ⊆ Metric.sphere 0 1 := by
  nontriviality E
  refine' fun k hk => mem_sphere_zero_iff_norm.mpr (le_antisymm _ _)
  · simpa only [CstarRing.norm_coe_unitary u] using norm_le_norm_of_mem hk
  · rw [← unitary.val_toUnits_apply u] at hk
    have hnk := ne_zero_of_mem_of_unit hk
    

Proof state:
case refine'_2
𝕜 : Type u_1
inst✝⁵ : NormedField 𝕜
E : Type u_2
inst✝⁴ : NormedRing E
inst✝³ : StarRing E
inst✝² : CstarRing E
inst✝¹ : NormedAlgebra 𝕜 E
inst✝ : CompleteSpace E
u : ↥(unitary E)
✝ : Nontrivial E
k : 𝕜
hk : k ∈ spectrum 𝕜 ↑(toUnits u)
hnk : k ≠ 0
⊢ 1 ≤ ‖k‖

Next tactic:
rw [← inv_inv (unitary.toUnits u), ← spectrum.map_inv, Set.mem_inv] at hk
theorem unitary.spectrum_subset_circle (u : unitary E) :
    spectrum 𝕜 (u : E) ⊆ Metric.sphere 0 1 := by
  nontriviality E
  refine' fun k hk => mem_sphere_zero_iff_norm.mpr (le_antisymm _ _)
  · simpa only [CstarRing.norm_coe_unitary u] using norm_le_norm_of_mem hk
  · rw [← unitary.val_toUnits_apply u] at hk
    have hnk := ne_zero_of_mem_of_unit hk
    rw [← inv_inv (unitary.toUnits u), ← spectrum.map_inv, Set.mem_inv] at hk
    

Proof state:
case refine'_2
𝕜 : Type u_1
inst✝⁵ : NormedField 𝕜
E : Type u_2
inst✝⁴ : NormedRing E
inst✝³ : StarRing E
inst✝² : CstarRing E
inst✝¹ : NormedAlgebra 𝕜 E
inst✝ : CompleteSpace E
u : ↥(unitary E)
✝ : Nontrivial E
k : 𝕜
hk : k⁻¹ ∈ spectrum 𝕜 ↑(toUnits u)⁻¹
hnk : k ≠ 0
⊢ 1 ≤ ‖k‖

Next tactic:
have : ‖k‖⁻¹ ≤ ‖(↑(unitary.toUnits u)⁻¹ : E)‖ :=
      by simpa only [norm_inv] using norm_le_norm_of_mem hk
theorem unitary.spectrum_subset_circle (u : unitary E) :
    spectrum 𝕜 (u : E) ⊆ Metric.sphere 0 1 := by
  nontriviality E
  refine' fun k hk => mem_sphere_zero_iff_norm.mpr (le_antisymm _ _)
  · simpa only [CstarRing.norm_coe_unitary u] using norm_le_norm_of_mem hk
  · rw [← unitary.val_toUnits_apply u] at hk
    have hnk := ne_zero_of_mem_of_unit hk
    rw [← inv_inv (unitary.toUnits u), ← spectrum.map_inv, Set.mem_inv] at hk
    have : ‖k‖⁻¹ ≤ ‖(↑(unitary.toUnits u)⁻¹ : E)‖ :=
      by 

Proof state:
𝕜 : Type u_1
inst✝⁵ : NormedField 𝕜
E : Type u_2
inst✝⁴ : NormedRing E
inst✝³ : StarRing E
inst✝² : CstarRing E
inst✝¹ : NormedAlgebra 𝕜 E
inst✝ : CompleteSpace E
u : ↥(unitary E)
✝ : Nontrivial E
k : 𝕜
hk : k⁻¹ ∈ spectrum 𝕜 ↑(toUnits u)⁻¹
hnk : k ≠ 0
⊢ ‖k‖⁻¹ ≤ ‖↑(toUnits u)⁻¹‖

Next tactic:
simpa only [norm_inv] using norm_le_norm_of_mem hk
theorem unitary.spectrum_subset_circle (u : unitary E) :
    spectrum 𝕜 (u : E) ⊆ Metric.sphere 0 1 := by
  nontriviality E
  refine' fun k hk => mem_sphere_zero_iff_norm.mpr (le_antisymm _ _)
  · simpa only [CstarRing.norm_coe_unitary u] using norm_le_norm_of_mem hk
  · rw [← unitary.val_toUnits_apply u] at hk
    have hnk := ne_zero_of_mem_of_unit hk
    rw [← inv_inv (unitary.toUnits u), ← spectrum.map_inv, Set.mem_inv] at hk
    have : ‖k‖⁻¹ ≤ ‖(↑(unitary.toUnits u)⁻¹ : E)‖ :=
      by simpa only [norm_inv] using norm_le_norm_of_mem hk
    

Proof state:
case refine'_2
𝕜 : Type u_1
inst✝⁵ : NormedField 𝕜
E : Type u_2
inst✝⁴ : NormedRing E
inst✝³ : StarRing E
inst✝² : CstarRing E
inst✝¹ : NormedAlgebra 𝕜 E
inst✝ : CompleteSpace E
u : ↥(unitary E)
✝ : Nontrivial E
k : 𝕜
hk : k⁻¹ ∈ spectrum 𝕜 ↑(toUnits u)⁻¹
hnk : k ≠ 0
this : ‖k‖⁻¹ ≤ ‖↑(toUnits u)⁻¹‖
⊢ 1 ≤ ‖k‖

Next tactic:
simpa using inv_le_of_inv_le (norm_pos_iff.mpr hnk) this
theorem IsSelfAdjoint.spectralRadius_eq_nnnorm {a : A} (ha : IsSelfAdjoint a) :
    spectralRadius ℂ a = ‖a‖₊ := by
  

Proof state:
A : Type u_1
inst✝⁴ : NormedRing A
inst✝³ : NormedAlgebra ℂ A
inst✝² : CompleteSpace A
inst✝¹ : StarRing A
inst✝ : CstarRing A
a : A
ha : IsSelfAdjoint a
⊢ spectralRadius ℂ a = ↑‖a‖₊

Next tactic:
have hconst : Tendsto (fun _n : ℕ => (‖a‖₊ : ℝ≥0∞)) atTop _ := tendsto_const_nhds
theorem IsSelfAdjoint.spectralRadius_eq_nnnorm {a : A} (ha : IsSelfAdjoint a) :
    spectralRadius ℂ a = ‖a‖₊ := by
  have hconst : Tendsto (fun _n : ℕ => (‖a‖₊ : ℝ≥0∞)) atTop _ := tendsto_const_nhds
  

Proof state:
A : Type u_1
inst✝⁴ : NormedRing A
inst✝³ : NormedAlgebra ℂ A
inst✝² : CompleteSpace A
inst✝¹ : StarRing A
inst✝ : CstarRing A
a : A
ha : IsSelfAdjoint a
hconst : Tendsto (fun _n => ↑‖a‖₊) atTop (𝓝 ↑‖a‖₊)
⊢ spectralRadius ℂ a = ↑‖a‖₊

Next tactic:
refine' tendsto_nhds_unique _ hconst
theorem IsSelfAdjoint.spectralRadius_eq_nnnorm {a : A} (ha : IsSelfAdjoint a) :
    spectralRadius ℂ a = ‖a‖₊ := by
  have hconst : Tendsto (fun _n : ℕ => (‖a‖₊ : ℝ≥0∞)) atTop _ := tendsto_const_nhds
  refine' tendsto_nhds_unique _ hconst
  

Proof state:
A : Type u_1
inst✝⁴ : NormedRing A
inst✝³ : NormedAlgebra ℂ A
inst✝² : CompleteSpace A
inst✝¹ : StarRing A
inst✝ : CstarRing A
a : A
ha : IsSelfAdjoint a
hconst : Tendsto (fun _n => ↑‖a‖₊) atTop (𝓝 ↑‖a‖₊)
⊢ Tendsto (fun _n => ↑‖a‖₊) atTop (𝓝 (spectralRadius ℂ a))

Next tactic:
convert
    (spectrum.pow_nnnorm_pow_one_div_tendsto_nhds_spectralRadius (a : A)).comp
      (Nat.tendsto_pow_atTop_atTop_of_one_lt one_lt_two) using 1
theorem IsSelfAdjoint.spectralRadius_eq_nnnorm {a : A} (ha : IsSelfAdjoint a) :
    spectralRadius ℂ a = ‖a‖₊ := by
  have hconst : Tendsto (fun _n : ℕ => (‖a‖₊ : ℝ≥0∞)) atTop _ := tendsto_const_nhds
  refine' tendsto_nhds_unique _ hconst
  convert
    (spectrum.pow_nnnorm_pow_one_div_tendsto_nhds_spectralRadius (a : A)).comp
      (Nat.tendsto_pow_atTop_atTop_of_one_lt one_lt_two) using 1
  

Proof state:
case h.e'_3
A : Type u_1
inst✝⁴ : NormedRing A
inst✝³ : NormedAlgebra ℂ A
inst✝² : CompleteSpace A
inst✝¹ : StarRing A
inst✝ : CstarRing A
a : A
ha : IsSelfAdjoint a
hconst : Tendsto (fun _n => ↑‖a‖₊) atTop (𝓝 ↑‖a‖₊)
⊢ (fun _n => ↑‖a‖₊) = (fun n => ↑‖a ^ n‖₊ ^ (1 / ↑n)) ∘ fun n => 2 ^ n

Next tactic:
refine' funext fun n => _