| namespace Foo | |
| def y := 10 | |
| def _root_.Bla.f (x : Nat) := x + y | |
| #check Bla.f | |
| example : Bla.f 5 = 15 := rfl | |
| def _root_.g (x : Nat) := | |
| match x with | |
| | 0 => 1 | |
| | x+1 => 2*g x | |
| def _root_.Boo.g (x : Nat) := | |
| match x with | |
| | 0 => 1 | |
| | x+1 => 3 * Boo.g x | |
| protected def _root_.h (x : Nat) := x -- Error | |
| example : g 3 = 8 := rfl | |
| example : Boo.g 2 = 9 := rfl | |
| end Foo | |
| def _root_ (y : Nat) := y + 1 -- Error | |
| def _root_._root_ (y : Nat) := y -- Error | |
| def _root_.f._root_ (y : Nat) := y -- Error | |
| protected def _root_.h (x : Nat) := x -- Error | |
| protected def _root_.Boo.h (x : Nat) := x | |
| example : Boo.h x = x := rfl | |
| #check h -- Error | |
| #check f -- Error | |
| open Bla | |
| #check f -- Ok | |
| namespace Test | |
| mutual | |
| def _root_.isEven (x : Nat) := | |
| match x with | |
| | 0 => true | |
| | x+1 => isOdd x | |
| def _root_.isOdd (x : Nat) := | |
| match x with | |
| | 0 => false | |
| | x+1 => isEven x | |
| end | |
| private def _root_.prv (x : Nat) := x + x + x | |
| example : prv 5 = 15 := rfl | |
| end Test | |
| example : isEven 0 = true := by simp! [isOdd, isEven] | |
| example : isOdd 1 = true := by simp! [isOdd, isEven] | |
| example : isEven 2 = true := by simp! [isOdd, isEven] | |
| example : prv 5 = 15 := rfl | |
| set_option pp.raw true in | |
| #check prv | |
| namespace Ex | |
| @[scoped simp] theorem _root_.isEven_of_isOdd (x : Nat) : isEven (x+1) = isOdd x := by simp [isEven] | |
| @[scoped simp] theorem _root_.isOdd_of_isEven (x : Nat) : isOdd (x+1) = isEven x := by simp [isOdd] | |
| example : isEven (x+1+1) = isEven x := by simp -- Ok | |
| end Ex | |
| example : isEven (x+1+1) = isEven x := by simp (config := { failIfUnchanged := false }); done -- Error | |
| open Ex in | |
| example : isEven (x+1+1) = isEven x := by simp -- Ok | |
| example : isEven (x+1+1) = isEven x := by simp (config := { failIfUnchanged := false }); done -- Error | |
| namespace Foo | |
| def _root_.Bla.g (x : Nat) : Nat := | |
| match x with | |
| | 0 => 1 | |
| | .succ x => h x + g x | |
| where | |
| h (x : Nat) := | |
| match x with | |
| | 0 => 2 | |
| | .succ x => 2 * g x | |
| def _root_.Bla.g' (x : Nat) : Nat := | |
| match x with | |
| | 0 => 1 | |
| | .succ x => g' x | |
| end Foo |