new_frontend

def f1.g := 10

def f1 (x : Nat) : Nat :=
let rec g : Nat → Nat -- Error f1.g has already been declared
  | 0   => x
  | y+1 => 2 * g y;
g (g x)

axiom Ax {α} : α

def f2 (x : Nat) : Nat :=
let rec
  g : Nat → Nat
  | 0   => 1
  | y+1 => (h y).val,
  h : (x : Nat) → { y : Nat // y < g x } -- unknown identifier `g`
  | 0 => ⟨10, Ax⟩
  | _ => ⟨20, Ax⟩;
10


mutual

def f (x : Nat) : Nat :=
let rec g (y : Nat) (h : y = f x) : Nat :=  -- error type is using 'f'
  f y + 1;
x + 1

end

mutual

def f (x : Nat) : Nat :=
let rec g (y : Nat) : Nat :=
  let rec h (z : Nat) (h : z = g z) : Nat := z + 1; -- error type is using 'g'
  f y + 1;
x + 1

end
