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
Cmd instead of
Ctrl .
/-
Copyright (c) 2022 Mario Carneiro. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Mario Carneiro
-/
namespace Fin
@[ simp ] theorem ofNat'_zero_val : ( Fin.ofNat' 0 h ). val = 0 := Nat.zero_mod : β (b : Nat ), 0 % b = 0 Nat.zero_mod _
@[ simp ] theorem mod_val : β {n : Nat } (a b : Fin n ), (a % b ).val = a .val % b .val mod_val ( a b : Fin n ) : ( a % b ). val = a . val % b . val :=
Nat.mod_eq_of_lt : β {a b : Nat }, a < b β a % b = a Nat.mod_eq_of_lt ( Nat.lt_of_le_of_lt : β {n m k : Nat }, n β€ m β m < k β n < k Nat.lt_of_le_of_lt ( Nat.mod_le : β (x y : Nat ), x % y β€ x Nat.mod_le ..) a . 2 : β {n : Nat } (self : Fin n ), self .val < n 2)
@[ simp ] theorem div_val : β {n : Nat } (a b : Fin n ), (a / b ).val = a .val / b .val div_val ( a b : Fin n ) : ( a / b ). val = a . val / b . val :=
Nat.mod_eq_of_lt : β {a b : Nat }, a < b β a % b = a Nat.mod_eq_of_lt ( Nat.lt_of_le_of_lt : β {n m k : Nat }, n β€ m β m < k β n < k Nat.lt_of_le_of_lt ( Nat.div_le_self : β (n k : Nat ), n / k β€ n Nat.div_le_self ..) a . 2 : β {n : Nat } (self : Fin n ), self .val < n 2)
@[ simp ] theorem modn_val ( a : Fin n ) ( b : Nat ) : ( a . modn b ). val = a . val % b :=
Nat.mod_eq_of_lt : β {a b : Nat }, a < b β a % b = a Nat.mod_eq_of_lt ( Nat.lt_of_le_of_lt : β {n m k : Nat }, n β€ m β m < k β n < k Nat.lt_of_le_of_lt ( Nat.mod_le : β (x y : Nat ), x % y β€ x Nat.mod_le ..) a . 2 : β {n : Nat } (self : Fin n ), self .val < n 2)
end Fin
namespace USize
@[ simp ] theorem lt_def { a b : USize } : a < b β a . toNat < b . toNat := .rfl
@[ simp ] theorem le_def { a b : USize } : a β€ b β a . toNat β€ b . toNat := .rfl
@[ simp ] theorem zero_toNat : ( 0 : USize ). toNat = 0 := Nat.zero_mod : β (b : Nat ), 0 % b = 0 Nat.zero_mod _
@[ simp ] theorem mod_toNat ( a b : USize ) : ( a % b ). toNat = a . toNat % b . toNat :=
Fin.mod_val : β {n : Nat } (a b : Fin n ), (a % b ).val = a .val % b .val Fin.mod_val ..
@[ simp ] theorem div_toNat ( a b : USize ) : ( a / b ). toNat = a . toNat / b . toNat :=
Fin.div_val : β {n : Nat } (a b : Fin n ), (a / b ).val = a .val / b .val Fin.div_val ..
@[ simp ] theorem modn_toNat ( a : USize ) ( b : Nat ) : ( a . modn b ). toNat = a . toNat % b :=
Fin.modn_val ..
theorem mod_lt ( a b : USize ) ( h : 0 < b ) : a % b < b := USize.modn_lt _ ( by simp at h ; exact h )
theorem toNat.inj : β { a b : USize }, a . toNat = b . toNat β a = b
| β¨ _ , _ β©, β¨_, _β©, rfl : β {Ξ± : Sort ?u.1081} {a : Ξ± }, a = a rfl => rfl : β {Ξ± : Sort ?u.1138} {a : Ξ± }, a = a rfl
end USize