44 lines
1.2 KiB
Text
44 lines
1.2 KiB
Text
namespace Ex1
|
||
|
||
inductive Multiset (α: Type): Type
|
||
def Finset (α : Type) := @Subtype (Multiset α) (λ _ => True)
|
||
def Finset.insert (a : α): Finset α → Finset α := sorry
|
||
def Finset.empty : Finset α := sorry
|
||
|
||
structure Foo (G: Fin 0) (m: Nat) where
|
||
n: Nat
|
||
f: Fin m
|
||
|
||
inductive Bar {G: Fin 0} : {m: Nat} → Finset (Foo G m) → Type where
|
||
| insert : Bar (Finset.insert (Foo.mk n f) Γ)
|
||
| empty : Bar Finset.empty
|
||
|
||
example {G: Fin 0} : {n: Nat} → {Γ: Finset <| Foo G n} → Bar Γ → Nat
|
||
| Nat.zero, _, _ => 1
|
||
| Nat.succ _, _, Bar.insert => 2
|
||
| Nat.succ _, _, _ => 3
|
||
|
||
end Ex1
|
||
|
||
namespace Ex2
|
||
|
||
inductive Multiset (α: Type _): Type _
|
||
def Finset (α : Type _) := @Subtype (Multiset α) (λ _ => True)
|
||
def Finset.insert [DecidableEq α](a : α): Finset α → Finset α := sorry
|
||
def Finset.empty : Finset α := sorry
|
||
|
||
structure Foo (G: Fin 0) (m: Nat) where
|
||
n: Nat
|
||
f: Fin m
|
||
deriving DecidableEq
|
||
|
||
inductive Bar {G: Fin 0}: {m: Nat} → Finset (Foo G m) → Type _
|
||
| insert: Bar (Finset.insert (Foo.mk n f) Γ)
|
||
| empty: Bar Finset.empty
|
||
|
||
example {G: Fin 0} : ∀ {n: Nat} {Γ: Finset $ Foo G n} (p: Bar Γ), Nat
|
||
| 0, _, _ => 0
|
||
| _+1, _, Bar.insert => 0
|
||
| _+1, _, _ => 0
|
||
|
||
end Ex2
|