Examples of W-types #
We take the view of W types as inductive types.
Given α : Type and β : α → Type, the W type determined by this data, WType β, is the
inductively with constructors from α and arities of each constructor a : α given by β a.
This file contains Nat and List as examples of W types.
Main results #
WType.equivNat: the construction of the naturals as a W-type is equivalent toNatWType.equivList: the construction of lists on a typeγas a W-type is equivalent toList γ
Equations
- WType.instInhabitedNatα = { default := WType.Natα.zero }
The arity of the constructors for the naturals, zero takes no arguments, succ takes one
Equations
- WType.Natβ x = match x with | WType.Natα.zero => Empty | WType.Natα.succ => Unit
Instances For
Equations
- WType.instInhabitedNatβSucc = { default := () }
The isomorphism from the naturals to its corresponding WType
Equations
- WType.ofNat Nat.zero = WType.mk WType.Natα.zero Empty.elim
- WType.ofNat (Nat.succ n) = WType.mk WType.Natα.succ fun (x : WType.Natβ WType.Natα.succ) => WType.ofNat n
Instances For
The isomorphism from the WType of the naturals to the naturals
Equations
- WType.toNat (WType.mk WType.Natα.zero f) = 0
- WType.toNat (WType.mk WType.Natα.succ f) = Nat.succ (WType.toNat (f ()))
Instances For
The naturals are equivalent to their associated WType
Equations
- WType.equivNat = { toFun := WType.toNat, invFun := WType.ofNat, left_inv := WType.leftInverse_nat, right_inv := WType.rightInverse_nat }
Instances For
WType.Natα is equivalent to PUnit ⊕ PUnit.
This is useful when considering the associated polynomial endofunctor.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- WType.instInhabitedListα γ = { default := WType.Listα.nil }
The arities of each constructor for lists, nil takes no arguments, cons hd takes one
Equations
- WType.Listβ γ x = match x with | WType.Listα.nil => PEmpty.{u + 1} | WType.Listα.cons a => PUnit.{u + 1}
Instances For
Equations
- WType.instInhabitedListβCons γ hd = { default := PUnit.unit }
The isomorphism from lists to the WType construction of lists
Equations
- WType.ofList γ [] = WType.mk WType.Listα.nil PEmpty.elim
- WType.ofList γ (hd :: tl) = WType.mk (WType.Listα.cons hd) fun (x : WType.Listβ γ (WType.Listα.cons hd)) => WType.ofList γ tl
Instances For
The isomorphism from the WType construction of lists to lists
Equations
- WType.toList γ (WType.mk WType.Listα.nil f) = []
- WType.toList γ (WType.mk (WType.Listα.cons hd) f) = hd :: WType.toList γ (f PUnit.unit)
Instances For
Lists are equivalent to their associated WType
Equations
- WType.equivList γ = { toFun := WType.toList γ, invFun := WType.ofList γ, left_inv := ⋯, right_inv := ⋯ }
Instances For
WType.Listα is equivalent to γ with an extra point.
This is useful when considering the associated polynomial endofunctor
Equations
- One or more equations did not get rendered due to their size.