53 lines
912 B
Text
53 lines
912 B
Text
import Lean
|
||
|
||
structure WrappedNat where
|
||
val : Nat
|
||
|
||
structure WrappedFun (α) where
|
||
fn : Nat → α
|
||
|
||
structure WrappedType where
|
||
typ : Type
|
||
|
||
attribute [coe] WrappedNat.val
|
||
instance : Coe WrappedNat Nat where coe := WrappedNat.val
|
||
|
||
#eval Lean.Meta.registerCoercion ``WrappedFun.fn (some ⟨2, 1, .coeFun⟩)
|
||
instance : CoeFun (WrappedFun α) (fun _ => Nat → α) where coe := WrappedFun.fn
|
||
|
||
#eval Lean.Meta.registerCoercion ``WrappedType.typ (some ⟨1, 0, .coeSort⟩)
|
||
instance : CoeSort WrappedType Type where coe := WrappedType.typ
|
||
|
||
section coe
|
||
variable (n : WrappedNat)
|
||
|
||
#check (↑n : Nat)
|
||
|
||
#check n.val
|
||
|
||
end coe
|
||
|
||
section coeFun
|
||
variable (f : WrappedFun Nat) (g : Nat → WrappedFun Nat) (h : WrappedFun (WrappedFun Nat))
|
||
|
||
#check f.fn
|
||
|
||
#check ⇑f
|
||
|
||
#check ⇑f 1
|
||
|
||
#check ⇑(g 1)
|
||
|
||
#check g 1 2
|
||
|
||
#check ⇑h
|
||
|
||
end coeFun
|
||
|
||
section coeSort
|
||
variable (t : WrappedType)
|
||
|
||
#check t.typ
|
||
#check ↥t
|
||
|
||
end coeSort
|