Zulip Chat Archive
Stream: new members
Topic: Namespaces and rfl
Trevor Hyde (Jan 17 2025 at 16:30):
I have a question about this example from Theorem Proving in Lean 4:
namespace Hidden
inductive Nat where
| zero : Nat
| succ : Nat → Nat
deriving Repr
namespace Nat
def add (m n : Nat) : Nat :=
match n with
| Nat.zero => m
| Nat.succ n => Nat.succ (add m n)
instance : Add Nat where
add := add
theorem add_zero (m : Nat) : m + zero = m := rfl
theorem add_succ (m n : Nat) : m + succ n = succ (m + n) := rfl
end Nat
end Hidden
If I change the namespace from Nat to Foo, the rfl tactic does not work to prove these theorems. Why does the namespace have to match the type Nat? What is the general rule here?
Ruben Van de Velde (Jan 17 2025 at 16:34):
If you add
set_option autoImplicit false
you get better error messages:
unknown identifier 'zero'
unknown identifier 'succ'
Ruben Van de Velde (Jan 17 2025 at 16:34):
If you're in a namespace Foo, the variants of an inductive type Foo are automatically in scope
Last updated: May 02 2025 at 03:31 UTC