89 lines
1.2 KiB
Text
89 lines
1.2 KiB
Text
namespace Ex1
|
|
|
|
mutual
|
|
|
|
def Foo.boo (x : Nat) :=
|
|
match x with
|
|
| 0 => 1
|
|
| x + 1 => 2*Boo.bla x
|
|
|
|
def Boo.bla (x : Nat) :=
|
|
match x with
|
|
| 0 => 2
|
|
| x+1 => 3*Foo.boo x
|
|
|
|
end
|
|
|
|
example : Foo.boo 2 = 2*3*1 := by
|
|
simp [Foo.boo, Boo.bla]
|
|
|
|
end Ex1
|
|
|
|
namespace Ex2
|
|
|
|
mutual
|
|
|
|
def Bla.Foo.boo (x : Nat) :=
|
|
match x with
|
|
| 0 => 1
|
|
| x + 1 => 2*Boo.bla x
|
|
|
|
def Bla.Boo.bla (x : Nat) :=
|
|
match x with
|
|
| 0 => 2
|
|
| x+1 => 3*Foo.boo x
|
|
|
|
end
|
|
|
|
example : Bla.Foo.boo 2 = 2*3*1 := by
|
|
simp [Bla.Foo.boo, Bla.Boo.bla]
|
|
|
|
end Ex2
|
|
|
|
namespace Ex3
|
|
|
|
mutual
|
|
inductive Foo
|
|
| somefoo : Foo
|
|
| bar : Bar → Foo
|
|
|
|
inductive Bar
|
|
| somebar : Bar
|
|
| foobar : Foo → Bar → Bar
|
|
end
|
|
|
|
mutual
|
|
def Foo.toString : Foo → String
|
|
| Foo.somefoo => "foo"
|
|
| Foo.bar b => Bar.toString b
|
|
|
|
def Bar.toString : Bar → String
|
|
| Bar.somebar => "bar"
|
|
| Bar.foobar f b => (Foo.toString f) ++ (Bar.toString b)
|
|
end
|
|
|
|
end Ex3
|
|
|
|
namespace Ex4
|
|
|
|
mutual
|
|
inductive Foo
|
|
| somefoo : Foo
|
|
| bar : Bar → Foo
|
|
|
|
inductive Bar
|
|
| somebar : Bar
|
|
| foobar : Foo → Bar → Bar
|
|
end
|
|
|
|
mutual
|
|
def Foo.toString : Foo → String
|
|
| .somefoo => "foo"
|
|
| .bar b => b.toString
|
|
|
|
def Bar.toString : Bar → String
|
|
| .somebar => "bar"
|
|
| .foobar f b => f.toString ++ b.toString
|
|
end
|
|
|
|
end Ex4
|