ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
-- Subring.closure_induction
@[elab_as_elim]
theorem closure_induction {s : Set R} {p : R → Prop} {x} (h : x ∈ closure s) (Hs : ∀ x ∈ s, p x)
    (zero : p 0) (one : p 1) (add : ∀ x y, p x → p y → p (x + y)) (neg : ∀ x : R, p x → p (-x))
    (mul : ∀ x y, p x → p y → p (x * y)) : p x 
Arguments: {R : Type u} [Ring R] {s : Set R} {p : R → Prop} {x : R} (h : x ∈ Subring.closure s) (Hs : ∀ x ∈ s, p x) (zero : p 0) (one : p 1) (add : ∀ (x y : R), p x → p y → p (x + y)) (neg : ∀ (x : R), p x → p (-x)) (mul : ∀ (x y : R), p x → p y → p (x * y))
Goal: p x
-- Subring.closure_induction'
@[elab_as_elim]
theorem closure_induction' {s : Set R} {p : ∀ x, x ∈ closure s → Prop}
    (mem : ∀ (x) (h : x ∈ s), p x (subset_closure h))
    (zero : p 0 (zero_mem _)) (one : p 1 (one_mem _))
    (add : ∀ x hx y hy, p x hx → p y hy → p (x + y) (add_mem hx hy))
    (neg : ∀ x hx, p x hx → p (-x) (neg_mem hx))
    (mul : ∀ x hx y hy, p x hx → p y hy → p (x * y) (mul_mem hx hy))
    {a : R} (ha : a ∈ closure s) : p a ha 
Arguments: {R : Type u} [Ring R] {s : Set R} {p : (x : R) → x ∈ Subring.closure s → Prop} (mem : ∀ (x : R) (h : x ∈ s), p x ⋯) (zero : p 0 ⋯) (one : p 1 ⋯) (add : ∀ (x : R) (hx : x ∈ Subring.closure s) (y : R) (hy : y ∈ Subring.closure s), p x hx → p y hy → p (x + y) ⋯) (neg : ∀ (x : R) (hx : x ∈ Subring.closure s), p x hx → p (-x) ⋯) (mul : ∀ (x : R) (hx : x ∈ Subring.closure s) (y : R) (hy : y ∈ Subring.closure s), p x hx → p y hy → p (x * y) ⋯) {a : R} (ha : a ∈ Subring.closure s)
Goal: p a ha
-- Subring.closure_induction₂
@[elab_as_elim]
theorem closure_induction₂ {s : Set R} {p : R → R → Prop} {a b : R} (ha : a ∈ closure s)
    (hb : b ∈ closure s) (Hs : ∀ x ∈ s, ∀ y ∈ s, p x y) (H0_left : ∀ x, p 0 x)
    (H0_right : ∀ x, p x 0) (H1_left : ∀ x, p 1 x) (H1_right : ∀ x, p x 1)
    (Hneg_left : ∀ x y, p x y → p (-x) y) (Hneg_right : ∀ x y, p x y → p x (-y))
    (Hadd_left : ∀ x₁ x₂ y, p x₁ y → p x₂ y → p (x₁ + x₂) y)
    (Hadd_right : ∀ x y₁ y₂, p x y₁ → p x y₂ → p x (y₁ + y₂))
    (Hmul_left : ∀ x₁ x₂ y, p x₁ y → p x₂ y → p (x₁ * x₂) y)
    (Hmul_right : ∀ x y₁ y₂, p x y₁ → p x y₂ → p x (y₁ * y₂)) : p a b 
Arguments: {R : Type u} [Ring R] {s : Set R} {p : R → R → Prop} {a b : R} (ha : a ∈ Subring.closure s) (hb : b ∈ Subring.closure s) (Hs : ∀ x ∈ s, ∀ y ∈ s, p x y) (H0_left : ∀ (x : R), p 0 x) (H0_right : ∀ (x : R), p x 0) (H1_left : ∀ (x : R), p 1 x) (H1_right : ∀ (x : R), p x 1) (Hneg_left : ∀ (x y : R), p x y → p (-x) y) (Hneg_right : ∀ (x y : R), p x y → p x (-y)) (Hadd_left : ∀ (x₁ x₂ y : R), p x₁ y → p x₂ y → p (x₁ + x₂) y) (Hadd_right : ∀ (x y₁ y₂ : R), p x y₁ → p x y₂ → p x (y₁ + y₂)) (Hmul_left : ∀ (x₁ x₂ y : R), p x₁ y → p x₂ y → p (x₁ * x₂) y) (Hmul_right : ∀ (x y₁ y₂ : R), p x y₁ → p x y₂ → p x (y₁ * y₂))
Goal: p a b
-- Subring.mem_closure_iff
theorem mem_closure_iff {s : Set R} {x} :
    x ∈ closure s ↔ x ∈ AddSubgroup.closure (Submonoid.closure s : Set R) 
Arguments: {R : Type u} [Ring R] {s : Set R} {x : R}
Goal: x ∈ Subring.closure s ↔ x ∈ AddSubgroup.closure ↑(Submonoid.closure s)
-- Subring.exists_list_of_mem_closure
theorem exists_list_of_mem_closure {s : Set R} {x : R} (h : x ∈ closure s) :
    ∃ L : List (List R), (∀ t ∈ L, ∀ y ∈ t, y ∈ s ∨ y = (-1 : R)) ∧ (L.map List.prod).sum = x 
Arguments: {R : Type u} [Ring R] {s : Set R} {x : R} (h : x ∈ Subring.closure s)
Goal: ∃ L, (∀ t ∈ L, ∀ y ∈ t, y ∈ s ∨ y = -1) ∧ (List.map List.prod L).sum = x
-- Subring.closure_eq
theorem closure_eq (s : Subring R) : closure (s : Set R) = s 
Arguments: {R : Type u} [Ring R] (s : Subring R)
Goal: Subring.closure ↑s = s
-- Subring.closure_empty
@[simp]
theorem closure_empty : closure (∅ : Set R) = ⊥ 
Arguments: {R : Type u} [Ring R]
Goal: Subring.closure ∅ = ⊥
-- Subring.closure_univ
@[simp]
theorem closure_univ : closure (Set.univ : Set R) = ⊤ 
Arguments: {R : Type u} [Ring R]
Goal: Subring.closure Set.univ = ⊤
-- Subring.closure_union
theorem closure_union (s t : Set R) : closure (s ∪ t) = closure s ⊔ closure t 
Arguments: {R : Type u} [Ring R] (s t : Set R)
Goal: Subring.closure (s ∪ t) = Subring.closure s ⊔ Subring.closure t
-- Subring.closure_iUnion
theorem closure_iUnion {ι} (s : ι → Set R) : closure (⋃ i, s i) = ⨆ i, closure (s i) 
Arguments: {R : Type u} [Ring R] {ι : Sort u_1} (s : ι → Set R)
Goal: Subring.closure (⋃ i, s i) = ⨆ i, Subring.closure (s i)
-- Subring.closure_sUnion
theorem closure_sUnion (s : Set (Set R)) : closure (⋃₀ s) = ⨆ t ∈ s, closure t 
Arguments: {R : Type u} [Ring R] (s : Set (Set R))
Goal: Subring.closure (⋃₀ s) = ⨆ t ∈ s, Subring.closure t
-- Subring.map_sup
theorem map_sup (s t : Subring R) (f : R →+* S) : (s ⊔ t).map f = s.map f ⊔ t.map f 
Arguments: {R : Type u} {S : Type v} [Ring R] [Ring S] (s t : Subring R) (f : R →+* S)
Goal: Subring.map f (s ⊔ t) = Subring.map f s ⊔ Subring.map f t
-- Subring.map_iSup
theorem map_iSup {ι : Sort*} (f : R →+* S) (s : ι → Subring R) :
    (iSup s).map f = ⨆ i, (s i).map f 
Arguments: {R : Type u} {S : Type v} [Ring R] [Ring S] {ι : Sort u_1} (f : R →+* S) (s : ι → Subring R)
Goal: Subring.map f (iSup s) = ⨆ i, Subring.map f (s i)
-- Subring.comap_inf
theorem comap_inf (s t : Subring S) (f : R →+* S) : (s ⊓ t).comap f = s.comap f ⊓ t.comap f 
Arguments: {R : Type u} {S : Type v} [Ring R] [Ring S] (s t : Subring S) (f : R →+* S)
Goal: Subring.comap f (s ⊓ t) = Subring.comap f s ⊓ Subring.comap f t
-- Subring.comap_iInf
theorem comap_iInf {ι : Sort*} (f : R →+* S) (s : ι → Subring S) :
    (iInf s).comap f = ⨅ i, (s i).comap f 
Arguments: {R : Type u} {S : Type v} [Ring R] [Ring S] {ι : Sort u_1} (f : R →+* S) (s : ι → Subring S)
Goal: Subring.comap f (iInf s) = ⨅ i, Subring.comap f (s i)
-- Subring.map_bot
@[simp]
theorem map_bot (f : R →+* S) : (⊥ : Subring R).map f = ⊥ 
Arguments: {R : Type u} {S : Type v} [Ring R] [Ring S] (f : R →+* S)
Goal: Subring.map f ⊥ = ⊥
-- Subring.comap_top
@[simp]
theorem comap_top (f : R →+* S) : (⊤ : Subring S).comap f = ⊤ 
Arguments: {R : Type u} {S : Type v} [Ring R] [Ring S] (f : R →+* S)
Goal: Subring.comap f ⊤ = ⊤
-- Subring.coe_prod
@[norm_cast]
theorem coe_prod (s : Subring R) (t : Subring S) :
    (s.prod t : Set (R × S)) = (s : Set R) ×ˢ (t : Set S) 
Arguments: {R : Type u} {S : Type v} [Ring R] [Ring S] (s : Subring R) (t : Subring S)
Goal: ↑(s.prod t) = ↑s ×ˢ ↑t
-- Subring.mem_prod
theorem mem_prod {s : Subring R} {t : Subring S} {p : R × S} : p ∈ s.prod t ↔ p.1 ∈ s ∧ p.2 ∈ t 
Arguments: {R : Type u} {S : Type v} [Ring R] [Ring S] {s : Subring R} {t : Subring S} {p : R × S}
Goal: p ∈ s.prod t ↔ p.1 ∈ s ∧ p.2 ∈ t
-- Subring.prod_mono
@[mono]
theorem prod_mono ⦃s₁ s₂ : Subring R⦄ (hs : s₁ ≤ s₂) ⦃t₁ t₂ : Subring S⦄ (ht : t₁ ≤ t₂) :
    s₁.prod t₁ ≤ s₂.prod t₂ 
Arguments: {R : Type u} {S : Type v} [Ring R] [Ring S] ⦃s₁ s₂ : Subring R⦄ (hs : s₁ ≤ s₂) ⦃t₁ t₂ : Subring S⦄ (ht : t₁ ≤ t₂)
Goal: s₁.prod t₁ ≤ s₂.prod t₂
-- Subring.prod_mono_right
theorem prod_mono_right (s : Subring R) : Monotone fun t : Subring S => s.prod t 
Arguments: {R : Type u} {S : Type v} [Ring R] [Ring S] (s : Subring R)
Goal: Monotone fun t => s.prod t
-- Subring.prod_mono_left
theorem prod_mono_left (t : Subring S) : Monotone fun s : Subring R => s.prod t 
Arguments: {R : Type u} {S : Type v} [Ring R] [Ring S] (t : Subring S)
Goal: Monotone fun s => s.prod t
-- Subring.prod_top
theorem prod_top (s : Subring R) : s.prod (⊤ : Subring S) = s.comap (RingHom.fst R S) 
Arguments: {R : Type u} {S : Type v} [Ring R] [Ring S] (s : Subring R)
Goal: s.prod ⊤ = Subring.comap (RingHom.fst R S) s
-- Subring.top_prod
theorem top_prod (s : Subring S) : (⊤ : Subring R).prod s = s.comap (RingHom.snd R S) 
Arguments: {R : Type u} {S : Type v} [Ring R] [Ring S] (s : Subring S)
Goal: ⊤.prod s = Subring.comap (RingHom.snd R S) s
-- Subring.top_prod_top
@[simp]
theorem top_prod_top : (⊤ : Subring R).prod (⊤ : Subring S) = ⊤ 
Arguments: {R : Type u} {S : Type v} [Ring R] [Ring S]
Goal: ⊤.prod ⊤ = ⊤
-- Subring.mem_iSup_of_directed
theorem mem_iSup_of_directed {ι} [hι : Nonempty ι] {S : ι → Subring R} (hS : Directed (· ≤ ·) S)
    {x : R} : (x ∈ ⨆ i, S i) ↔ ∃ i, x ∈ S i 
Arguments: {R : Type u} [Ring R] {ι : Sort u_1} [hι : Nonempty ι] {S : ι → Subring R} (hS : Directed (fun x x_1 => x ≤ x_1) S) {x : R}
Goal: x ∈ ⨆ i, S i ↔ ∃ i, x ∈ S i
-- Subring.coe_iSup_of_directed
theorem coe_iSup_of_directed {ι} [hι : Nonempty ι] {S : ι → Subring R} (hS : Directed (· ≤ ·) S) :
    ((⨆ i, S i : Subring R) : Set R) = ⋃ i, S i 
Arguments: {R : Type u} [Ring R] {ι : Sort u_1} [hι : Nonempty ι] {S : ι → Subring R} (hS : Directed (fun x x_1 => x ≤ x_1) S)
Goal: ↑(⨆ i, S i) = ⋃ i, ↑(S i)
-- Subring.mem_sSup_of_directedOn
theorem mem_sSup_of_directedOn {S : Set (Subring R)} (Sne : S.Nonempty) (hS : DirectedOn (· ≤ ·) S)
    {x : R} : x ∈ sSup S ↔ ∃ s ∈ S, x ∈ s 
Arguments: {R : Type u} [Ring R] {S : Set (Subring R)} (Sne : S.Nonempty) (hS : DirectedOn (fun x x_1 => x ≤ x_1) S) {x : R}
Goal: x ∈ sSup S ↔ ∃ s ∈ S, x ∈ s
-- Subring.coe_sSup_of_directedOn
theorem coe_sSup_of_directedOn {S : Set (Subring R)} (Sne : S.Nonempty)
    (hS : DirectedOn (· ≤ ·) S) : (↑(sSup S) : Set R) = ⋃ s ∈ S, ↑s 
Arguments: {R : Type u} [Ring R] {S : Set (Subring R)} (Sne : S.Nonempty) (hS : DirectedOn (fun x x_1 => x ≤ x_1) S)
Goal: ↑(sSup S) = ⋃ s ∈ S, ↑s
-- Subring.mem_map_equiv
theorem mem_map_equiv {f : R ≃+* S} {K : Subring R} {x : S} :
    x ∈ K.map (f : R →+* S) ↔ f.symm x ∈ K 
Arguments: {R : Type u} {S : Type v} [Ring R] [Ring S] {f : R ≃+* S} {K : Subring R} {x : S}
Goal: x ∈ Subring.map (↑f) K ↔ f.symm x ∈ K
-- Subring.map_equiv_eq_comap_symm
theorem map_equiv_eq_comap_symm (f : R ≃+* S) (K : Subring R) :
    K.map (f : R →+* S) = K.comap f.symm 
Arguments: {R : Type u} {S : Type v} [Ring R] [Ring S] (f : R ≃+* S) (K : Subring R)
Goal: Subring.map (↑f) K = Subring.comap (↑f.symm) K
-- Subring.comap_equiv_eq_map_symm
theorem comap_equiv_eq_map_symm (f : R ≃+* S) (K : Subring S) :
    K.comap (f : R →+* S) = K.map f.symm 
Arguments: {R : Type u} {S : Type v} [Ring R] [Ring S] (f : R ≃+* S) (K : Subring S)
Goal: Subring.comap (↑f) K = Subring.map (↑f.symm) K
-- RingHom.coe_rangeRestrict
@[simp]
theorem coe_rangeRestrict (f : R →+* S) (x : R) : (f.rangeRestrict x : S) = f x 
Arguments: {R : Type u} {S : Type v} [Ring R] [Ring S] (f : R →+* S) (x : R)
Goal: ↑(f.rangeRestrict x) = f x
-- RingHom.rangeRestrict_surjective
theorem rangeRestrict_surjective (f : R →+* S) : Function.Surjective f.rangeRestrict 
Arguments: {R : Type u} {S : Type v} [Ring R] [Ring S] (f : R →+* S)
Goal: Function.Surjective ⇑f.rangeRestrict
-- RingHom.range_top_iff_surjective
theorem range_top_iff_surjective {f : R →+* S} :
    f.range = (⊤ : Subring S) ↔ Function.Surjective f 
Arguments: {R : Type u} {S : Type v} [Ring R] [Ring S] {f : R →+* S}
Goal: f.range = ⊤ ↔ Function.Surjective ⇑f
-- RingHom.range_top_of_surjective
@[simp]
theorem range_top_of_surjective (f : R →+* S) (hf : Function.Surjective f) :
    f.range = (⊤ : Subring S) 
Arguments: {R : Type u} {S : Type v} [Ring R] [Ring S] (f : R →+* S) (hf : Function.Surjective ⇑f)
Goal: f.range = ⊤
-- RingHom.eqLocus_same
@[simp]
theorem eqLocus_same (f : R →+* S) : f.eqLocus f = ⊤ 
Arguments: {R : Type u} [Ring R] {S : Type v} [Semiring S] (f : R →+* S)
Goal: f.eqLocus f = ⊤
-- RingHom.eqOn_set_closure
theorem eqOn_set_closure {f g : R →+* S} {s : Set R} (h : Set.EqOn f g s) :
    Set.EqOn f g (closure s) 
Arguments: {R : Type u} [Ring R] {S : Type v} [Semiring S] {f g : R →+* S} {s : Set R} (h : Set.EqOn (⇑f) (⇑g) s)
Goal: Set.EqOn ⇑f ⇑g ↑(Subring.closure s)
-- RingHom.eq_of_eqOn_set_top
theorem eq_of_eqOn_set_top {f g : R →+* S} (h : Set.EqOn f g (⊤ : Subring R)) : f = g 
Arguments: {R : Type u} [Ring R] {S : Type v} [Semiring S] {f g : R →+* S} (h : Set.EqOn ⇑f ⇑g ↑⊤)
Goal: f = g
-- RingHom.eq_of_eqOn_set_dense
theorem eq_of_eqOn_set_dense {s : Set R} (hs : closure s = ⊤) {f g : R →+* S} (h : s.EqOn f g) :
    f = g 
Arguments: {R : Type u} [Ring R] {S : Type v} [Semiring S] {s : Set R} (hs : Subring.closure s = ⊤) {f g : R →+* S} (h : Set.EqOn (⇑f) (⇑g) s)
Goal: f = g
-- RingHom.closure_preimage_le
theorem closure_preimage_le (f : R →+* S) (s : Set S) : closure (f ⁻¹' s) ≤ (closure s).comap f 
Arguments: {R : Type u} {S : Type v} [Ring R] [Ring S] (f : R →+* S) (s : Set S)
Goal: Subring.closure (⇑f ⁻¹' s) ≤ Subring.comap f (Subring.closure s)
-- RingHom.map_closure
theorem map_closure (f : R →+* S) (s : Set R) : (closure s).map f = closure (f '' s) 
Arguments: {R : Type u} {S : Type v} [Ring R] [Ring S] (f : R →+* S) (s : Set R)
Goal: Subring.map f (Subring.closure s) = Subring.closure (⇑f '' s)
-- Subring.range_subtype
@[simp]
theorem range_subtype (s : Subring R) : s.subtype.range = s 
Arguments: {R : Type u} [Ring R] (s : Subring R)
Goal: s.subtype.range = s
-- Subring.range_fst
theorem range_fst : (fst R S).rangeS = ⊤ 
Arguments: {R : Type u} {S : Type v} [Ring R] [Ring S]
Goal: (RingHom.fst R S).rangeS = ⊤
-- Subring.range_snd
theorem range_snd : (snd R S).rangeS = ⊤ 
Arguments: {R : Type u} {S : Type v} [Ring R] [Ring S]
Goal: (RingHom.snd R S).rangeS = ⊤
-- Subring.prod_bot_sup_bot_prod
@[simp]
theorem prod_bot_sup_bot_prod (s : Subring R) (t : Subring S) : s.prod ⊥ ⊔ prod ⊥ t = s.prod t 
Arguments: {R : Type u} {S : Type v} [Ring R] [Ring S] (s : Subring R) (t : Subring S)
Goal: s.prod ⊥ ⊔ ⊥.prod t = s.prod t
-- RingEquiv.ofLeftInverse_apply
@[simp]
theorem ofLeftInverse_apply {g : S → R} {f : R →+* S} (h : Function.LeftInverse g f) (x : R) :
    ↑(ofLeftInverse h x) = f x 
Arguments: {R : Type u} {S : Type v} [Ring R] [Ring S] {g : S → R} {f : R →+* S} (h : Function.LeftInverse g ⇑f) (x : R)
Goal: ↑((RingEquiv.ofLeftInverse h) x) = f x
-- RingEquiv.ofLeftInverse_symm_apply
@[simp]
theorem ofLeftInverse_symm_apply {g : S → R} {f : R →+* S} (h : Function.LeftInverse g f)
    (x : f.range) : (ofLeftInverse h).symm x = g x 
Arguments: {R : Type u} {S : Type v} [Ring R] [Ring S] {g : S → R} {f : R →+* S} (h : Function.LeftInverse g ⇑f) (x : ↥f.range)
Goal: (RingEquiv.ofLeftInverse h).symm x = g ↑x
-- RingEquiv.subringMap_symm_apply_coe
@[simps!]
def subringMap (e : R ≃+* S) : s ≃+* s.map e.toRingHom 
Arguments: {R : Type u} {S : Type v} [Ring R] [Ring S] {s : Subring R} (e : R ≃+* S) (y : ↑(⇑↑e.toAddEquiv '' ↑s.toAddSubmonoid))
Goal: ↑(e.subringMap.symm y) = (↑e).symm ↑y
-- RingEquiv.subringMap_apply_coe
@[simps!]
def subringMap (e : R ≃+* S) : s ≃+* s.map e.toRingHom 
Arguments: {R : Type u} {S : Type v} [Ring R] [Ring S] {s : Subring R} (e : R ≃+* S) (x : ↑↑s.toAddSubmonoid)
Goal: ↑(e.subringMap x) = e ↑x
-- Subring.InClosure.recOn
@[elab_as_elim]
protected theorem InClosure.recOn {C : R → Prop} {x : R} (hx : x ∈ closure s) (h1 : C 1)
    (hneg1 : C (-1)) (hs : ∀ z ∈ s, ∀ n, C n → C (z * n)) (ha : ∀ {x y}, C x → C y → C (x + y)) :
    C x 
Arguments: {R : Type u} [Ring R] {s : Set R} {C : R → Prop} {x : R} (hx : x ∈ Subring.closure s) (h1 : C 1) (hneg1 : C (-1)) (hs : ∀ z ∈ s, ∀ (n : R), C n → C (z * n)) (ha : ∀ {x y : R}, C x → C y → C (x + y))
Goal: C x
-- Subring.closure_preimage_le
theorem closure_preimage_le (f : R →+* S) (s : Set S) : closure (f ⁻¹' s) ≤ (closure s).comap f 
Arguments: {R : Type u} {S : Type v} [Ring R] [Ring S] (f : R →+* S) (s : Set S)
Goal: Subring.closure (⇑f ⁻¹' s) ≤ Subring.comap f (Subring.closure s)
-- AddSubgroup.int_mul_mem
theorem AddSubgroup.int_mul_mem {G : AddSubgroup R} (k : ℤ) {g : R} (h : g ∈ G) :
    (k : R) * g ∈ G 
Arguments: {R : Type u} [Ring R] {G : AddSubgroup R} (k : ℤ) {g : R} (h : g ∈ G)
Goal: ↑k * g ∈ G
-- Subring.smul_def
theorem smul_def [SMul R α] {S : Subring R} (g : S) (m : α) : g • m = (g : R) • m 
Arguments: {R : Type u} [Ring R] {α : Type u_1} [SMul R α] {S : Subring R} (g : ↥S) (m : α)
Goal: g • m = ↑g • m
-- Subring.map_comap_eq
theorem map_comap_eq (f : R →+* S) (t : Subring S) : (t.comap f).map f = t ⊓ f.range 
Arguments: {R : Type u} {S : Type v} [Ring R] [Ring S] (f : R →+* S) (t : Subring S)
Goal: Subring.map f (Subring.comap f t) = t ⊓ f.range
-- Subring.map_comap_eq_self
theorem map_comap_eq_self
    {f : R →+* S} {t : Subring S} (h : t ≤ f.range) : (t.comap f).map f = t 
Arguments: {R : Type u} {S : Type v} [Ring R] [Ring S] {f : R →+* S} {t : Subring S} (h : t ≤ f.range)
Goal: Subring.map f (Subring.comap f t) = t
-- Subring.map_comap_eq_self_of_surjective
theorem map_comap_eq_self_of_surjective
    {f : R →+* S} (hf : Function.Surjective f) (t : Subring S) : (t.comap f).map f = t 
Arguments: {R : Type u} {S : Type v} [Ring R] [Ring S] {f : R →+* S} (hf : Function.Surjective ⇑f) (t : Subring S)
Goal: Subring.map f (Subring.comap f t) = t
-- Subring.comap_map_eq
theorem comap_map_eq (f : R →+* S) (s : Subring R) :
    (s.map f).comap f = s ⊔ closure (f ⁻¹' {0}) 
Arguments: {R : Type u} {S : Type v} [Ring R] [Ring S] (f : R →+* S) (s : Subring R)
Goal: Subring.comap f (Subring.map f s) = s ⊔ Subring.closure (⇑f ⁻¹' {0})
-- Subring.comap_map_eq_self
theorem comap_map_eq_self {f : R →+* S} {s : Subring R}
    (h : f ⁻¹' {0} ⊆ s) : (s.map f).comap f = s 
Arguments: {R : Type u} {S : Type v} [Ring R] [Ring S] {f : R →+* S} {s : Subring R} (h : ⇑f ⁻¹' {0} ⊆ ↑s)
Goal: Subring.comap f (Subring.map f s) = s
-- Subring.comap_map_eq_self_of_injective
theorem comap_map_eq_self_of_injective
    {f : R →+* S} (hf : Function.Injective f) (s : Subring R) : (s.map f).comap f = s 
Arguments: {R : Type u} {S : Type v} [Ring R] [Ring S] {f : R →+* S} (hf : Function.Injective ⇑f) (s : Subring R)
Goal: Subring.comap f (Subring.map f s) = s
-- bddAbove_inv
@[to_additive (attr := simp)]
theorem bddAbove_inv : BddAbove s⁻¹ ↔ BddBelow s 
Arguments: {G : Type u_1} [Group G] [Preorder G] [CovariantClass G G (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1] [CovariantClass G G (Function.swap fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1] {s : Set G}
Goal: BddAbove s⁻¹ ↔ BddBelow s
-- bddAbove_neg
@[to_additive (attr := simp)]
theorem bddAbove_inv : BddAbove s⁻¹ ↔ BddBelow s 
Arguments: {G : Type u_1} [AddGroup G] [Preorder G] [CovariantClass G G (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1] [CovariantClass G G (Function.swap fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1] {s : Set G}
Goal: BddAbove (-s) ↔ BddBelow s
-- bddBelow_inv
@[to_additive (attr := simp)]
theorem bddBelow_inv : BddBelow s⁻¹ ↔ BddAbove s 
Arguments: {G : Type u_1} [Group G] [Preorder G] [CovariantClass G G (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1] [CovariantClass G G (Function.swap fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1] {s : Set G}
Goal: BddBelow s⁻¹ ↔ BddAbove s
-- bddBelow_neg
@[to_additive (attr := simp)]
theorem bddBelow_inv : BddBelow s⁻¹ ↔ BddAbove s 
Arguments: {G : Type u_1} [AddGroup G] [Preorder G] [CovariantClass G G (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1] [CovariantClass G G (Function.swap fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1] {s : Set G}
Goal: BddBelow (-s) ↔ BddAbove s
-- BddAbove.neg
@[to_additive]
theorem BddAbove.inv (h : BddAbove s) : BddBelow s⁻¹ 
Arguments: {G : Type u_1} [AddGroup G] [Preorder G] [CovariantClass G G (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1] [CovariantClass G G (Function.swap fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1] {s : Set G} (h : BddAbove s)
Goal: BddBelow (-s)
-- BddAbove.inv
@[to_additive]
theorem BddAbove.inv (h : BddAbove s) : BddBelow s⁻¹ 
Arguments: {G : Type u_1} [Group G] [Preorder G] [CovariantClass G G (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1] [CovariantClass G G (Function.swap fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1] {s : Set G} (h : BddAbove s)
Goal: BddBelow s⁻¹
-- BddBelow.neg
@[to_additive]
theorem BddBelow.inv (h : BddBelow s) : BddAbove s⁻¹ 
Arguments: {G : Type u_1} [AddGroup G] [Preorder G] [CovariantClass G G (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1] [CovariantClass G G (Function.swap fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1] {s : Set G} (h : BddBelow s)
Goal: BddAbove (-s)
-- BddBelow.inv
@[to_additive]
theorem BddBelow.inv (h : BddBelow s) : BddAbove s⁻¹ 
Arguments: {G : Type u_1} [Group G] [Preorder G] [CovariantClass G G (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1] [CovariantClass G G (Function.swap fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1] {s : Set G} (h : BddBelow s)
Goal: BddAbove s⁻¹
-- isLUB_neg
@[to_additive (attr := simp)]
theorem isLUB_inv : IsLUB s⁻¹ a ↔ IsGLB s a⁻¹ 
Arguments: {G : Type u_1} [AddGroup G] [Preorder G] [CovariantClass G G (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1] [CovariantClass G G (Function.swap fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1] {s : Set G} {a : G}
Goal: IsLUB (-s) a ↔ IsGLB s (-a)
-- isLUB_inv
@[to_additive (attr := simp)]
theorem isLUB_inv : IsLUB s⁻¹ a ↔ IsGLB s a⁻¹ 
Arguments: {G : Type u_1} [Group G] [Preorder G] [CovariantClass G G (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1] [CovariantClass G G (Function.swap fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1] {s : Set G} {a : G}
Goal: IsLUB s⁻¹ a ↔ IsGLB s a⁻¹
-- isLUB_neg'
@[to_additive]
theorem isLUB_inv' : IsLUB s⁻¹ a⁻¹ ↔ IsGLB s a 
Arguments: {G : Type u_1} [AddGroup G] [Preorder G] [CovariantClass G G (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1] [CovariantClass G G (Function.swap fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1] {s : Set G} {a : G}
Goal: IsLUB (-s) (-a) ↔ IsGLB s a
-- isLUB_inv'
@[to_additive]
theorem isLUB_inv' : IsLUB s⁻¹ a⁻¹ ↔ IsGLB s a 
Arguments: {G : Type u_1} [Group G] [Preorder G] [CovariantClass G G (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1] [CovariantClass G G (Function.swap fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1] {s : Set G} {a : G}
Goal: IsLUB s⁻¹ a⁻¹ ↔ IsGLB s a
-- IsGLB.inv
@[to_additive]
theorem IsGLB.inv (h : IsGLB s a) : IsLUB s⁻¹ a⁻¹ 
Arguments: {G : Type u_1} [Group G] [Preorder G] [CovariantClass G G (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1] [CovariantClass G G (Function.swap fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1] {s : Set G} {a : G} (h : IsGLB s a)
Goal: IsLUB s⁻¹ a⁻¹
-- IsGLB.neg
@[to_additive]
theorem IsGLB.inv (h : IsGLB s a) : IsLUB s⁻¹ a⁻¹ 
Arguments: {G : Type u_1} [AddGroup G] [Preorder G] [CovariantClass G G (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1] [CovariantClass G G (Function.swap fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1] {s : Set G} {a : G} (h : IsGLB s a)
Goal: IsLUB (-s) (-a)
-- isGLB_neg
@[to_additive (attr := simp)]
theorem isGLB_inv : IsGLB s⁻¹ a ↔ IsLUB s a⁻¹ 
Arguments: {G : Type u_1} [AddGroup G] [Preorder G] [CovariantClass G G (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1] [CovariantClass G G (Function.swap fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1] {s : Set G} {a : G}
Goal: IsGLB (-s) a ↔ IsLUB s (-a)
-- isGLB_inv
@[to_additive (attr := simp)]
theorem isGLB_inv : IsGLB s⁻¹ a ↔ IsLUB s a⁻¹ 
Arguments: {G : Type u_1} [Group G] [Preorder G] [CovariantClass G G (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1] [CovariantClass G G (Function.swap fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1] {s : Set G} {a : G}
Goal: IsGLB s⁻¹ a ↔ IsLUB s a⁻¹
-- isGLB_neg'
@[to_additive]
theorem isGLB_inv' : IsGLB s⁻¹ a⁻¹ ↔ IsLUB s a 
Arguments: {G : Type u_1} [AddGroup G] [Preorder G] [CovariantClass G G (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1] [CovariantClass G G (Function.swap fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1] {s : Set G} {a : G}
Goal: IsGLB (-s) (-a) ↔ IsLUB s a
-- isGLB_inv'
@[to_additive]
theorem isGLB_inv' : IsGLB s⁻¹ a⁻¹ ↔ IsLUB s a 
Arguments: {G : Type u_1} [Group G] [Preorder G] [CovariantClass G G (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1] [CovariantClass G G (Function.swap fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1] {s : Set G} {a : G}
Goal: IsGLB s⁻¹ a⁻¹ ↔ IsLUB s a
-- IsLUB.inv
@[to_additive]
theorem IsLUB.inv (h : IsLUB s a) : IsGLB s⁻¹ a⁻¹ 
Arguments: {G : Type u_1} [Group G] [Preorder G] [CovariantClass G G (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1] [CovariantClass G G (Function.swap fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1] {s : Set G} {a : G} (h : IsLUB s a)
Goal: IsGLB s⁻¹ a⁻¹
-- IsLUB.neg
@[to_additive]
theorem IsLUB.inv (h : IsLUB s a) : IsGLB s⁻¹ a⁻¹ 
Arguments: {G : Type u_1} [AddGroup G] [Preorder G] [CovariantClass G G (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1] [CovariantClass G G (Function.swap fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1] {s : Set G} {a : G} (h : IsLUB s a)
Goal: IsGLB (-s) (-a)