Built with doc-gen4, running Lean4.
Bubbles () indicate interactive fragments: hover for details, tap to reveal contents.
Use Ctrl+↑Ctrl+↓to navigate, Ctrl+🖱️to focus.
On Mac, use Cmdinstead of Ctrl.
/-
Copyright (c) 2022 Stuart Presnell. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Stuart Presnell
! This file was ported from Lean 3 source module data.nat.even_odd_rec
! leanprover-community/mathlib commit 18a5306c091183ac90884daa9373fa3b178e8607
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
import Mathlib.Data.Nat.Basic
import Mathlib.Init.Data.Nat.Bitwise
/-! # A recursion principle based on even and odd numbers. -/
-- porting note: TODO:
-- Remove dependence on deprecated definitions bit0, bit1.
set_option linter.deprecated falsenamespace Nat
/-- Recursion principle on even and odd numbers: if we have `P 0`, and for all `i : ℕ` we can
extend from `P i` to both `P (2 * i)` and `P (2 * i + 1)`, then we have `P n` for all `n : ℕ`.
This is nothing more than a wrapper around `Nat.binaryRec`, to avoid having to switch to
dealing with `bit0` and `bit1`. -/
@[elab_as_elim]
def
n: ℕ P: ℕ → Sort u_1 h0: P0 h_even: (i : ℕ) → Pi → P (2*i) h_odd: (i : ℕ) → Pi → P (2*i+1) H: h_even0h0=h0
HEq
(match false, n,
binaryRech0
(fun xx_1x_2 =>
match x, x_1, x_2 with
| false, i, hi => (_ : 2*i=bit0i) ▸ h_evenihi
| true, i, hi => (_ : 2*i+1=bit1i) ▸ h_oddihi)
n with
| false, i, hi => (_ : 2*i=bit0i) ▸ h_evenihi
| true, i, hi => (_ : 2*i+1=bit1i) ▸ h_oddihi)
(h_evenn (evenOddRech0h_evenh_oddn))
n: ℕ P: ℕ → Sort u_1 h0: P0 h_even: (i : ℕ) → Pi → P (2*i) h_odd: (i : ℕ) → Pi → P (2*i+1) H: h_even0h0=h0
h
(match false, 0, h0 with
| false, i, hi => (_ : 2*i=bit0i) ▸ h_evenihi
| true, i, hi => (_ : 2*i+1=bit1i) ▸ h_oddihi) =h0
n: ℕ P: ℕ → Sort u_1 h0: P0 h_even: (i : ℕ) → Pi → P (2*i) h_odd: (i : ℕ) → Pi → P (2*i+1) H: h_even0h0=h0
HEq
(match false, n,
binaryRech0
(fun xx_1x_2 =>
match x, x_1, x_2 with
| false, i, hi => (_ : 2*i=bit0i) ▸ h_evenihi
| true, i, hi => (_ : 2*i+1=bit1i) ▸ h_oddihi)
n with
| false, i, hi => (_ : 2*i=bit0i) ▸ h_evenihi
| true, i, hi => (_ : 2*i+1=bit1i) ▸ h_oddihi)
(h_evenn (evenOddRech0h_evenh_oddn))
n: ℕ P: ℕ → Sort u_1 h0: P0 h_even: (i : ℕ) → Pi → P (2*i) h_odd: (i : ℕ) → Pi → P (2*i+1) H: h_even0h0=h0
h
(match false, 0, h0 with
| false, i, hi => (_ : 2*i=bit0i) ▸ h_evenihi
| true, i, hi => (_ : 2*i+1=bit1i) ▸ h_oddihi) =h0
n: ℕ P: ℕ → Sort u_1 h0: P0 h_even: (i : ℕ) → Pi → P (2*i) h_odd: (i : ℕ) → Pi → P (2*i+1) H: h_even0h0=h0
HEq
(match false, n,
binaryRech0
(fun xx_1x_2 =>
match x, x_1, x_2 with
| false, i, hi => (_ : 2*i=bit0i) ▸ h_evenihi
| true, i, hi => (_ : 2*i+1=bit1i) ▸ h_oddihi)
n with
| false, i, hi => (_ : 2*i=bit0i) ▸ h_evenihi
| true, i, hi => (_ : 2*i+1=bit1i) ▸ h_oddihi)
(h_evenn (evenOddRech0h_evenh_oddn))
n: ℕ P: ℕ → Sort u_1 h0: P0 h_even: (i : ℕ) → Pi → P (2*i) h_odd: (i : ℕ) → Pi → P (2*i+1) H: h_even0h0=h0
h
(match false, 0, h0 with
| false, i, hi => (_ : 2*i=bit0i) ▸ h_evenihi
| true, i, hi => (_ : 2*i+1=bit1i) ▸ h_oddihi) =h0
n: ℕ P: ℕ → Sort u_1 h0: P0 h_even: (i : ℕ) → Pi → P (2*i) h_odd: (i : ℕ) → Pi → P (2*i+1) H: h_even0h0=h0
n: ℕ P: ℕ → Sort u_1 h0: P0 h_even: (i : ℕ) → Pi → P (2*i) h_odd: (i : ℕ) → Pi → P (2*i+1) H: h_even0h0=h0
HEq
(match true, n,
binaryRech0
(fun xx_1x_2 =>
match x, x_1, x_2 with
| false, i, hi => (_ : 2*i=bit0i) ▸ h_evenihi
| true, i, hi => (_ : 2*i+1=bit1i) ▸ h_oddihi)
n with
| false, i, hi => (_ : 2*i=bit0i) ▸ h_evenihi
| true, i, hi => (_ : 2*i+1=bit1i) ▸ h_oddihi)
(h_oddn (evenOddRech0h_evenh_oddn))
n: ℕ P: ℕ → Sort u_1 h0: P0 h_even: (i : ℕ) → Pi → P (2*i) h_odd: (i : ℕ) → Pi → P (2*i+1) H: h_even0h0=h0
h
(match false, 0, h0 with
| false, i, hi => (_ : 2*i=bit0i) ▸ h_evenihi
| true, i, hi => (_ : 2*i+1=bit1i) ▸ h_oddihi) =h0
n: ℕ P: ℕ → Sort u_1 h0: P0 h_even: (i : ℕ) → Pi → P (2*i) h_odd: (i : ℕ) → Pi → P (2*i+1) H: h_even0h0=h0
HEq
(match true, n,
binaryRech0
(fun xx_1x_2 =>
match x, x_1, x_2 with
| false, i, hi => (_ : 2*i=bit0i) ▸ h_evenihi
| true, i, hi => (_ : 2*i+1=bit1i) ▸ h_oddihi)
n with
| false, i, hi => (_ : 2*i=bit0i) ▸ h_evenihi
| true, i, hi => (_ : 2*i+1=bit1i) ▸ h_oddihi)
(h_oddn (evenOddRech0h_evenh_oddn))
n: ℕ P: ℕ → Sort u_1 h0: P0 h_even: (i : ℕ) → Pi → P (2*i) h_odd: (i : ℕ) → Pi → P (2*i+1) H: h_even0h0=h0
h
(match false, 0, h0 with
| false, i, hi => (_ : 2*i=bit0i) ▸ h_evenihi
| true, i, hi => (_ : 2*i+1=bit1i) ▸ h_oddihi) =h0
n: ℕ P: ℕ → Sort u_1 h0: P0 h_even: (i : ℕ) → Pi → P (2*i) h_odd: (i : ℕ) → Pi → P (2*i+1) H: h_even0h0=h0
HEq
(match true, n,
binaryRech0
(fun xx_1x_2 =>
match x, x_1, x_2 with
| false, i, hi => (_ : 2*i=bit0i) ▸ h_evenihi
| true, i, hi => (_ : 2*i+1=bit1i) ▸ h_oddihi)
n with
| false, i, hi => (_ : 2*i=bit0i) ▸ h_evenihi
| true, i, hi => (_ : 2*i+1=bit1i) ▸ h_oddihi)
(h_oddn (evenOddRech0h_evenh_oddn))
n: ℕ P: ℕ → Sort u_1 h0: P0 h_even: (i : ℕ) → Pi → P (2*i) h_odd: (i : ℕ) → Pi → P (2*i+1) H: h_even0h0=h0
h
(match false, 0, h0 with
| false, i, hi => (_ : 2*i=bit0i) ▸ h_evenihi
| true, i, hi => (_ : 2*i+1=bit1i) ▸ h_oddihi) =h0
n: ℕ P: ℕ → Sort u_1 h0: P0 h_even: (i : ℕ) → Pi → P (2*i) h_odd: (i : ℕ) → Pi → P (2*i+1) H: h_even0h0=h0