Hi, I have a function f, which takes a type parameter `'a itself => ... => ('a::finite)`

and in a proof of the form `f t ... = ...`

I want to access the cardinality of t `CARD('a)`

in the sense of `CARD(t)`

, but that does not work. I suspect there might be a function like `itself_card t`

, but I could find nothing.

Hi,

could you describe what you mean by "cardinality of t"? If you want the cardinality of the set of all elements of type `'a itself`

you could get it by using `card (UNIV :: 'a itself set)`

, but I think this is unspecified(iirc itself is just there so the embedding of types into terms has one canonical representative `TYPE('a)`

and nothing else is specified). If you want the cardinality of the set of elements of type `'a`

you can use ``card (UNIV :: 'a set)`

Thank you, I should clarify: I have a function with a type variable, which is constrained as enum, so a type with finitely many instances. In the function definition I have access to 'a, but not in the proof. In the proof I have only t, which has type 'a itself and from t I want to get CARD('a) somehow, but I cannot access it directly. In short: I cannot mention 'a in the proof

I still don't really understand the problem. You should be able to access that type variable in the proof. But it's hard to say without having a concrete example.

But if you want you can define a `card_of`

function yourself, e.g. as an input abbreviation:

```
abbreviation (input) card_of :: "'a ⇒ nat" where
"card_of _ ≡ card (UNIV :: 'a set)"
```

(or something like that; not sure what a good name would be)

Manuel Eberl said:

I still don't really understand the problem. You should be able to access that type variable in the proof. But it's hard to say without having a concrete example.

But if you want you can define a

`card_of`

function yourself, e.g. as an input abbreviation:`abbreviation (input) card_of :: "'a ⇒ nat" where "card_of _ ≡ card (UNIV :: 'a set)"`

(or something like that; not sure what a good name would be)

Thank you, that works fine.

Last updated: Oct 12 2024 at 20:18 UTC