# Zulip Chat Archive

## Stream: general

### Topic: simps and new structure cmd

#### Yury G. Kudryashov (Dec 22 2020 at 22:46):

How do I customize `simps`

projections for new-style structures like docs#homeomorph?

#### Yury G. Kudryashov (Dec 22 2020 at 22:49):

I want to generate `simp`

lemmas at least for `apply`

and `symm_apply`

.

#### Yury G. Kudryashov (Dec 22 2020 at 22:49):

Another question about `simps`

: can I generate both `simp`

lemmas for non-applied coercions and non-simp lemmas for applied coercions?

#### Johan Commelin (Dec 23 2020 at 06:44):

@Yury G. Kudryashov I only know `simps`

via cargo cult, but are you looking for something like this:

```
structure locally_constant (X Y : Type*) [topological_space X] :=
(to_fun : X → Y)
(is_locally_constant : is_locally_constant to_fun)
namespace locally_constant
instance : has_coe_to_fun (locally_constant X Y) := ⟨_, locally_constant.to_fun⟩
initialize_simps_projections locally_constant (to_fun → apply)
-- ^^^^^^^^^^^^^^^^^
```

#### Yury G. Kudryashov (Dec 23 2020 at 23:23):

I found the code for `equiv`

. The problem with `homeomorph`

is that there is no `homeomorph.to_fun`

, only `equiv.to_fun (homeomorph.to_equiv _)`

#### Eric Wieser (Dec 23 2020 at 23:31):

Can you add a custom simps projection like docs#equiv.simps.inv_fun?

#### Yury G. Kudryashov (Dec 23 2020 at 23:33):

I don't know how should I name them to make attr#simps recognize them.

#### Yury G. Kudryashov (Dec 23 2020 at 23:34):

@Floris van Doorn ?

#### Eric Wieser (Dec 23 2020 at 23:38):

At a guess, adding a lemma `homeomorph.simps.to_equiv`

with a lemma statement of what you expect `apply`

to be might make progress

#### Floris van Doorn (Dec 24 2020 at 00:47):

I'm afraid that `@[simps]`

currently doesn't support making a custom projection that is a composition of two projections.

If I understand correctly, you have the following problem: right out of the box `@[simps]`

will state lemmas using `⇑(f.to_equiv)`

, and you want them to be stated using `⇑f`

. These are definitionally equal, but not syntactically so.

Let me see if I can add the functionality to `@[simps]`

(at some point). Can you give me an explicit example (maybe from the library) of a definition and the precise simp lemmas you want to generate?

#### Floris van Doorn (Dec 24 2020 at 00:47):

Related issue: #3837

#### Floris van Doorn (Dec 24 2020 at 00:52):

Question: does using `old_structure_cmd`

for `homeomorph`

break other things? It would at least "solve" this problem.

#### Yury G. Kudryashov (Dec 24 2020 at 04:37):

You can take any definition about `homeomorph`

(e.g., docs#homeomorph.trans). I want to have `⇑(h₁.trans h₂) x = h₂ (h₁ x)`

and `⇑(h₁.trans h₂).symm x = h₁.symm (h₂.symm x)`

.

#### Yury G. Kudryashov (Dec 24 2020 at 04:38):

Ideally, I want to have the following lemmas (possibly, with other names):

```
import topology.homeomorph
namespace homeomorph
variables {α β γ : Type*} [topological_space α] [topological_space β] [topological_space γ] (hab : α ≃ₜ β) (hbc : β ≃ₜ γ)
@[simp] lemma trans_to_equiv (hab.trans hbc).to_equiv = hab.to_equiv.trans hbc.to_equiv := rfl
@[simp] lemma coe_trans : ⇑(hab.trans hbc) = hbc ∘ hab := rfl
@[simp] lemma coe_trans_symm : ⇑(hab.trans hbc).symm = hab.symm ∘ hbc.symm := rfl
lemma trans_apply (x) : hab.trans hbc x = hbc (hab x) := rfl
lemma trans_symm_apply (x) : (hab.trans hbc).symm x = hab.symm (hbc.symm x) := rfl
```

#### Eric Wieser (Dec 24 2020 at 09:13):

Presumably ideally you'd like the entire api of `equiv`

to be duplicated on your type?

#### Eric Wieser (Dec 24 2020 at 09:13):

Which sounds like the same pain point as we have with the `_hom`

structures

#### Eric Wieser (Dec 24 2020 at 09:15):

Having no polymorphism associated with the `extends`

feature seems to be a recurring pain

#### Yury G. Kudryashov (Dec 24 2020 at 21:01):

Here I'm not talking about this problem. It's about `@[simps]`

#### Yury G. Kudryashov (Dec 24 2020 at 21:03):

`homeomorph.trans`

is just an example. Actually, I'm more interested in definitions like `sin_local_homeomorph`

Last updated: Aug 03 2023 at 10:10 UTC