Changes
34 changed files (+2270/-1116)
-
-
@@ -0,0 +1,223 @@import Mathlib.Algebra.BigOperators.Ring import Mathlib.Data.Real.Basic noncomputable section @[ext] structure Point where x : ℝ y : ℝ z : ℝ #check Point.ext example (a b : Point) (hx : a.x = b.x) (hy : a.y = b.y) (hz : a.z = b.z) : a = b := by ext repeat' assumption def myPoint1 : Point where x := 2 y := -1 z := 4 def myPoint2 : Point := ⟨2, -1, 4⟩ def myPoint3 := Point.mk 2 (-1) 4 structure Point' where build :: x : ℝ y : ℝ z : ℝ #check Point'.build 2 (-1) 4 namespace Point def add (a b : Point) : Point := ⟨a.x + b.x, a.y + b.y, a.z + b.z⟩ def add' (a b : Point) : Point where x := a.x + b.x y := a.y + b.y z := a.z + b.z #check add myPoint1 myPoint2 #check myPoint1.add myPoint2 end Point #check Point.add myPoint1 myPoint2 #check myPoint1.add myPoint2 namespace Point protected theorem add_comm (a b : Point) : add a b = add b a := by rw [add, add] ext <;> dsimp repeat' apply add_comm example (a b : Point) : add a b = add b a := by simp [add, add_comm] theorem add_x (a b : Point) : (a.add b).x = a.x + b.x := rfl def addAlt : Point → Point → Point | Point.mk x₁ y₁ z₁, Point.mk x₂ y₂ z₂ => ⟨x₁ + x₂, y₁ + y₂, z₁ + z₂⟩ def addAlt' : Point → Point → Point | ⟨x₁, y₁, z₁⟩, ⟨x₂, y₂, z₂⟩ => ⟨x₁ + x₂, y₁ + y₂, z₁ + z₂⟩ theorem addAlt_x (a b : Point) : (a.addAlt b).x = a.x + b.x := by cases a cases b rfl theorem addAlt_comm (a b : Point) : addAlt a b = addAlt b a := by rcases a with ⟨xa, ya, za⟩ rcases b with ⟨xb, yb, zb⟩ rw [addAlt, addAlt] ext <;> dsimp apply add_comm repeat' apply add_comm example (a b : Point) : addAlt a b = addAlt b a := by rcases a with ⟨xa, ya, za⟩ rcases b with ⟨xb, yb, zb⟩ simp [addAlt, add_comm] example : ∀ a b : Point, addAlt a b = addAlt b a := by rintro ⟨xa, ya, za⟩ ⟨xb, yb, zb⟩ simp [addAlt, add_comm] example : ∀ a b : Point, add a b = add b a := fun ⟨xa, ya, za⟩ ⟨xb, yb, zb⟩ => by simp [add, add_comm] protected theorem add_assoc (a b c : Point) : (a.add b).add c = a.add (b.add c) := by sorry def smul (r : ℝ) (a : Point) : Point := sorry theorem smul_distrib (r : ℝ) (a b : Point) : (smul r a).add (smul r b) = smul r (a.add b) := by sorry end Point structure StandardTwoSimplex where x : ℝ y : ℝ z : ℝ x_nonneg : 0 ≤ x y_nonneg : 0 ≤ y z_nonneg : 0 ≤ z sum_eq : x + y + z = 1 namespace StandardTwoSimplex def swapXy (a : StandardTwoSimplex) : StandardTwoSimplex where x := a.y y := a.x z := a.z x_nonneg := a.y_nonneg y_nonneg := a.x_nonneg z_nonneg := a.z_nonneg sum_eq := by rw [add_comm a.y a.x, a.sum_eq] noncomputable section def midpoint (a b : StandardTwoSimplex) : StandardTwoSimplex where x := (a.x + b.x) / 2 y := (a.y + b.y) / 2 z := (a.z + b.z) / 2 x_nonneg := div_nonneg (add_nonneg a.x_nonneg b.x_nonneg) (by norm_num) y_nonneg := div_nonneg (add_nonneg a.y_nonneg b.y_nonneg) (by norm_num) z_nonneg := div_nonneg (add_nonneg a.z_nonneg b.z_nonneg) (by norm_num) sum_eq := by field_simp; linarith [a.sum_eq, b.sum_eq] def weightedAverage (lambda : Real) (lambda_nonneg : 0 ≤ lambda) (lambda_le : lambda ≤ 1) (a b : StandardTwoSimplex) : StandardTwoSimplex := sorry end end StandardTwoSimplex open BigOperators structure StandardSimplex (n : ℕ) where V : Fin n → ℝ NonNeg : ∀ i : Fin n, 0 ≤ V i sum_eq_one : (∑ i, V i) = 1 namespace StandardSimplex def midpoint (n : ℕ) (a b : StandardSimplex n) : StandardSimplex n where V i := (a.V i + b.V i) / 2 NonNeg := by intro i apply div_nonneg · linarith [a.NonNeg i, b.NonNeg i] norm_num sum_eq_one := by simp [div_eq_mul_inv, ← Finset.sum_mul, Finset.sum_add_distrib, a.sum_eq_one, b.sum_eq_one] field_simp end StandardSimplex structure IsLinear (f : ℝ → ℝ) where is_additive : ∀ x y, f (x + y) = f x + f y preserves_mul : ∀ x c, f (c * x) = c * f x section variable (f : ℝ → ℝ) (linf : IsLinear f) #check linf.is_additive #check linf.preserves_mul end def Point'' := ℝ × ℝ × ℝ def IsLinear' (f : ℝ → ℝ) := (∀ x y, f (x + y) = f x + f y) ∧ ∀ x c, f (c * x) = c * f x def PReal := { y : ℝ // 0 < y } section variable (x : PReal) #check x.val #check x.property #check x.1 #check x.2 end def StandardTwoSimplex' := { p : ℝ × ℝ × ℝ // 0 ≤ p.1 ∧ 0 ≤ p.2.1 ∧ 0 ≤ p.2.2 ∧ p.1 + p.2.1 + p.2.2 = 1 } def StandardSimplex' (n : ℕ) := { v : Fin n → ℝ // (∀ i : Fin n, 0 ≤ v i) ∧ (∑ i, v i) = 1 } def StdSimplex := Σ n : ℕ, StandardSimplex n section variable (s : StdSimplex) #check s.fst #check s.snd #check s.1 #check s.2 end
-
-
-
@@ -0,0 +1,170 @@import Mathlib.Data.Real.Basic structure Group₁ (α : Type _) where mul : α → α → α one : α inv : α → α mul_assoc : ∀ x y z : α, mul (mul x y) z = mul x (mul y z) mul_one : ∀ x : α, mul x one = x one_mul : ∀ x : α, mul one x = x mul_left_inv : ∀ x : α, mul (inv x) x = one structure Group₁Cat where α : Type _ str : Group₁ α section variable (α β γ : Type _) variable (f : α ≃ β) (g : β ≃ γ) #check Equiv α β #check (f.toFun : α → β) #check (f.invFun : β → α) #check (f.right_inv : ∀ x : β, f (f.invFun x) = x) #check (f.left_inv : ∀ x : α, f.invFun (f x) = x) #check (Equiv.refl α : α ≃ α) #check (f.symm : β ≃ α) #check (f.trans g : α ≃ γ) example (x : α) : (f.trans g).toFun x = g.toFun (f.toFun x) := rfl example (x : α) : (f.trans g) x = g (f x) := rfl example : (f.trans g : α → γ) = g ∘ f := rfl end example (α : Type _) : Equiv.Perm α = (α ≃ α) := rfl def permGroup {α : Type _} : Group₁ (Equiv.Perm α) where mul f g := Equiv.trans g f one := Equiv.refl α inv := Equiv.symm mul_assoc f g h := (Equiv.trans_assoc _ _ _).symm one_mul := Equiv.trans_refl mul_one := Equiv.refl_trans mul_left_inv := Equiv.self_trans_symm structure AddGroup₁ (α : Type _) where (add : α → α → α) -- fill in the rest @[ext] structure Point where x : ℝ y : ℝ z : ℝ namespace Point def add (a b : Point) : Point := ⟨a.x + b.x, a.y + b.y, a.z + b.z⟩ def neg (a : Point) : Point := sorry def zero : Point := sorry def add_group_point : AddGroup₁ point := sorry end Point section variable {α : Type _} (f g : Equiv.Perm α) (n : ℕ) #check f * g #check mul_assoc f g g⁻¹ -- group power, defined for any group #check g ^ n example : f * g * g⁻¹ = f := by rw [mul_assoc, mul_right_inv, mul_one] example : f * g * g⁻¹ = f := mul_inv_cancel_right f g example {α : Type _} (f g : Equiv.Perm α) : g.symm.trans (g.trans f) = f := mul_inv_cancel_right f g end class Group₂ (α : Type _) where mul : α → α → α one : α inv : α → α mul_assoc : ∀ x y z : α, mul (mul x y) z = mul x (mul y z) mul_one : ∀ x : α, mul x one = x one_mul : ∀ x : α, mul one x = x mul_left_inv : ∀ x : α, mul (inv x) x = one instance {α : Type _} : Group₂ (Equiv.Perm α) where mul f g := Equiv.trans g f one := Equiv.refl α inv := Equiv.symm mul_assoc f g h := (Equiv.trans_assoc _ _ _).symm one_mul := Equiv.trans_refl mul_one := Equiv.refl_trans mul_left_inv := Equiv.self_trans_symm #check @Group₂.mul def mySquare {α : Type _} [Group₂ α] (x : α) := Group₂.mul x x #check @mySquare section variable {β : Type _} (f g : Equiv.Perm β) example : Group₂.mul f g = g.trans f := rfl example : mySquare f = f.trans f := rfl end instance : Inhabited Point where default := ⟨0, 0, 0⟩ #check (default : Point) example : ([] : List Point).headI = default := rfl instance : Add Point where add := Point.add section variable (x y : Point) #check x + y example : x + y = Point.add x y := rfl end instance hasMulGroup₂ {α : Type _} [Group₂ α] : Mul α := ⟨Group₂.mul⟩ instance hasOneGroup₂ {α : Type _} [Group₂ α] : One α := ⟨Group₂.one⟩ instance hasInvGroup₂ {α : Type _} [Group₂ α] : Inv α := ⟨Group₂.inv⟩ section variable {α : Type _} (f g : Equiv.Perm α) #check f * 1 * g⁻¹ def foo : f * 1 * g⁻¹ = g.symm.trans ((Equiv.refl α).trans f) := rfl end class AddGroup₂ (α : Type _) where add : α → α → α -- fill in the rest
-
-
-
@@ -0,0 +1,276 @@import Mathlib.Data.Int.Basic import Mathlib.Algebra.EuclideanDomain.Basic import Mathlib.RingTheory.PrincipalIdealDomain import Mathlib.Tactic @[ext] structure gaussInt where re : ℤ im : ℤ namespace gaussInt instance : Zero gaussInt := ⟨⟨0, 0⟩⟩ instance : One gaussInt := ⟨⟨1, 0⟩⟩ instance : Add gaussInt := ⟨fun x y => ⟨x.re + y.re, x.im + y.im⟩⟩ instance : Neg gaussInt := ⟨fun x => ⟨-x.re, -x.im⟩⟩ instance : Mul gaussInt := ⟨fun x y => ⟨x.re * y.re - x.im * y.im, x.re * y.im + x.im * y.re⟩⟩ theorem zero_def : (0 : gaussInt) = ⟨0, 0⟩ := rfl theorem one_def : (1 : gaussInt) = ⟨1, 0⟩ := rfl theorem add_def (x y : gaussInt) : x + y = ⟨x.re + y.re, x.im + y.im⟩ := rfl theorem neg_def (x : gaussInt) : -x = ⟨-x.re, -x.im⟩ := rfl theorem mul_def (x y : gaussInt) : x * y = ⟨x.re * y.re - x.im * y.im, x.re * y.im + x.im * y.re⟩ := rfl @[simp] theorem zero_re : (0 : gaussInt).re = 0 := rfl @[simp] theorem zero_im : (0 : gaussInt).im = 0 := rfl @[simp] theorem one_re : (1 : gaussInt).re = 1 := rfl @[simp] theorem one_im : (1 : gaussInt).im = 0 := rfl @[simp] theorem add_re (x y : gaussInt) : (x + y).re = x.re + y.re := rfl @[simp] theorem add_im (x y : gaussInt) : (x + y).im = x.im + y.im := rfl @[simp] theorem neg_re (x : gaussInt) : (-x).re = -x.re := rfl @[simp] theorem neg_im (x : gaussInt) : (-x).im = -x.im := rfl @[simp] theorem mul_re (x y : gaussInt) : (x * y).re = x.re * y.re - x.im * y.im := rfl @[simp] theorem mul_im (x y : gaussInt) : (x * y).im = x.re * y.im + x.im * y.re := rfl instance instCommRing : CommRing gaussInt where zero := 0 one := 1 add := (· + ·) neg x := -x mul := (· * ·) add_assoc := by intros ext <;> simp <;> ring zero_add := by intro ext <;> simp add_zero := by intro ext <;> simp add_left_neg := by intro ext <;> simp add_comm := by intros ext <;> simp <;> ring mul_assoc := by intros ext <;> simp <;> ring one_mul := by intro ext <;> simp mul_one := by intro ext <;> simp left_distrib := by intros ext <;> simp <;> ring right_distrib := by intros ext <;> simp <;> ring mul_comm := by intros ext <;> simp <;> ring zero_mul := sorry mul_zero := sorry instance : Nontrivial gaussInt := by use 0, 1 rw [Ne, gaussInt.ext_iff] simp end gaussInt example (a b : ℤ) : a = b * (a / b) + a % b := Eq.symm <| Int.ediv_add_emod a b example (a b : ℤ) : b ≠ 0 → 0 ≤ a % b := Int.emod_nonneg a example (a b : ℤ) : b ≠ 0 → a % b < abs b := Int.emod_lt a namespace Int def div' (a b : ℤ) := (a + b / 2) / b def mod' (a b : ℤ) := (a + b / 2) % b - b / 2 theorem div'_add_mod' (a b : ℤ) : b * div' a b + mod' a b = a := by rw [div', mod'] linarith [Int.ediv_add_emod (a + b / 2) b] theorem abs_mod'_le (a b : ℤ) (h : 0 < b) : abs (mod' a b) ≤ b / 2 := by rw [mod', abs_le] constructor · linarith [Int.emod_nonneg (a + b / 2) h.ne'] have := Int.emod_lt_of_pos (a + b / 2) h have := Int.ediv_add_emod b 2 have := Int.emod_lt_of_pos b zero_lt_two revert this; intro this -- FIXME, this should not be needed linarith theorem mod'_eq (a b : ℤ) : mod' a b = a - b * div' a b := by linarith [div'_add_mod' a b] end Int theorem sq_add_sq_eq_zero {α : Type _} [LinearOrderedRing α] (x y : α) : x ^ 2 + y ^ 2 = 0 ↔ x = 0 ∧ y = 0 := by sorry namespace gaussInt def norm (x : gaussInt) := x.re ^ 2 + x.im ^ 2 @[simp] theorem norm_nonneg (x : gaussInt) : 0 ≤ norm x := by sorry theorem norm_eq_zero (x : gaussInt) : norm x = 0 ↔ x = 0 := by sorry theorem norm_pos (x : gaussInt) : 0 < norm x ↔ x ≠ 0 := by sorry theorem norm_mul (x y : gaussInt) : norm (x * y) = norm x * norm y := by sorry def conj (x : gaussInt) : gaussInt := ⟨x.re, -x.im⟩ @[simp] theorem conj_re (x : gaussInt) : (conj x).re = x.re := rfl @[simp] theorem conj_im (x : gaussInt) : (conj x).im = -x.im := rfl theorem norm_conj (x : gaussInt) : norm (conj x) = norm x := by simp [norm] instance : Div gaussInt := ⟨fun x y => ⟨Int.div' (x * conj y).re (norm y), Int.div' (x * conj y).im (norm y)⟩⟩ instance : Mod gaussInt := ⟨fun x y => x - y * (x / y)⟩ theorem div_def (x y : gaussInt) : x / y = ⟨Int.div' (x * conj y).re (norm y), Int.div' (x * conj y).im (norm y)⟩ := rfl theorem mod_def (x y : gaussInt) : x % y = x - y * (x / y) := rfl theorem norm_mod_lt (x : gaussInt) {y : gaussInt} (hy : y ≠ 0) : (x % y).norm < y.norm := by have norm_y_pos : 0 < norm y := by rwa [norm_pos] have : x % y * conj y = ⟨Int.mod' (x * conj y).re (norm y), Int.mod' (x * conj y).im (norm y)⟩ := by rw [mod_def, sub_mul, Int.mod'_eq, Int.mod'_eq, sub_eq_add_neg, div_def, norm] ext <;> simp <;> ring have : norm (x % y) * norm y ≤ norm y / 2 * norm y := by conv => lhs rw [← norm_conj y, ← norm_mul, this, norm] simp trans 2 * (y.norm / 2) ^ 2 · rw [two_mul] apply add_le_add <;> · rw [sq_le_sq] apply le_trans (Int.abs_mod'_le _ _ norm_y_pos) apply le_abs_self rw [pow_two, ← mul_assoc, mul_comm, mul_comm (2 : ℤ)] apply mul_le_mul_of_nonneg_left · apply Int.ediv_mul_le norm_num apply Int.ediv_nonneg (norm_nonneg y) norm_num have : norm (x % y) ≤ norm y / 2 := le_of_mul_le_mul_right this norm_y_pos apply lt_of_le_of_lt this apply Int.ediv_lt_of_lt_mul · norm_num linarith theorem coe_natAbs_norm (x : gaussInt) : (x.norm.natAbs : ℤ) = x.norm := Int.natAbs_of_nonneg (norm_nonneg _) theorem natAbs_norm_mod_lt (x y : gaussInt) (hy : y ≠ 0) : (x % y).norm.natAbs < y.norm.natAbs := by apply Int.ofNat_lt.1 simp only [Int.coe_natAbs, abs_of_nonneg, norm_nonneg] apply norm_mod_lt x hy theorem not_norm_mul_left_lt_norm (x : gaussInt) {y : gaussInt} (hy : y ≠ 0) : ¬(norm (x * y)).natAbs < (norm x).natAbs := by apply not_lt_of_ge rw [norm_mul, Int.natAbs_mul] apply le_mul_of_one_le_right (Nat.zero_le _) apply Int.ofNat_le.1 rw [coe_natAbs_norm] exact Int.add_one_le_of_lt ((norm_pos _).mpr hy) instance : EuclideanDomain gaussInt := { gaussInt.instCommRing with quotient := (· / ·) remainder := (· % ·) quotient_mul_add_remainder_eq := fun x y => by simp only; rw [mod_def, add_comm, sub_add_cancel] quotient_zero := fun x => by simp [div_def, norm, Int.div'] rfl r := Measure (Int.natAbs ∘ norm) r_wellFounded := (measure (Int.natAbs ∘ norm)).2 remainder_lt := natAbs_norm_mod_lt mul_left_not_lt := not_norm_mul_left_lt_norm } example (x : gaussInt) : Irreducible x ↔ Prime x := PrincipalIdealRing.irreducible_iff_prime end gaussInt
-
-
-
@@ -0,0 +1,98 @@import Mathlib.Algebra.BigOperators.Ring import Mathlib.Data.Real.Basic noncomputable section @[ext] structure Point where x : ℝ y : ℝ z : ℝ namespace Point def add (a b : Point) : Point := ⟨a.x + b.x, a.y + b.y, a.z + b.z⟩ protected theorem add_assoc (a b c : Point) : (a.add b).add c = a.add (b.add c) := by simp [add, add_assoc] def smul (r : ℝ) (a : Point) : Point := ⟨r * a.x, r * a.y, r * a.z⟩ theorem smul_distrib (r : ℝ) (a b : Point) : (smul r a).add (smul r b) = smul r (a.add b) := by simp [add, smul, mul_add] end Point structure StandardTwoSimplex where x : ℝ y : ℝ z : ℝ x_nonneg : 0 ≤ x y_nonneg : 0 ≤ y z_nonneg : 0 ≤ z sum_eq : x + y + z = 1 namespace StandardTwoSimplex noncomputable section def weightedAverage (lambda : Real) (lambda_nonneg : 0 ≤ lambda) (lambda_le : lambda ≤ 1) (a b : StandardTwoSimplex) : StandardTwoSimplex where x := lambda * a.x + (1 - lambda) * b.x y := lambda * a.y + (1 - lambda) * b.y z := lambda * a.z + (1 - lambda) * b.z x_nonneg := add_nonneg (mul_nonneg lambda_nonneg a.x_nonneg) (mul_nonneg (by linarith) b.x_nonneg) y_nonneg := add_nonneg (mul_nonneg lambda_nonneg a.y_nonneg) (mul_nonneg (by linarith) b.y_nonneg) z_nonneg := add_nonneg (mul_nonneg lambda_nonneg a.z_nonneg) (mul_nonneg (by linarith) b.z_nonneg) sum_eq := by trans (a.x + a.y + a.z) * lambda + (b.x + b.y + b.z) * (1 - lambda) · ring simp [a.sum_eq, b.sum_eq] end end StandardTwoSimplex open BigOperators structure StandardSimplex (n : ℕ) where V : Fin n → ℝ NonNeg : ∀ i : Fin n, 0 ≤ V i sum_eq_one : (∑ i, V i) = 1 namespace StandardSimplex def midpoint (n : ℕ) (a b : StandardSimplex n) : StandardSimplex n where V i := (a.V i + b.V i) / 2 NonNeg := by intro i apply div_nonneg · linarith [a.NonNeg i, b.NonNeg i] norm_num sum_eq_one := by simp [div_eq_mul_inv, ← Finset.sum_mul, Finset.sum_add_distrib, a.sum_eq_one, b.sum_eq_one] field_simp end StandardSimplex namespace StandardSimplex def weightedAverage {n : ℕ} (lambda : Real) (lambda_nonneg : 0 ≤ lambda) (lambda_le : lambda ≤ 1) (a b : StandardSimplex n) : StandardSimplex n where V i := lambda * a.V i + (1 - lambda) * b.V i NonNeg i := add_nonneg (mul_nonneg lambda_nonneg (a.NonNeg i)) (mul_nonneg (by linarith) (b.NonNeg i)) sum_eq_one := by trans (lambda * ∑ i, a.V i) + (1 - lambda) * ∑ i, b.V i · rw [Finset.sum_add_distrib, Finset.mul_sum, Finset.mul_sum] simp [a.sum_eq_one, b.sum_eq_one] end StandardSimplex
-
-
-
@@ -0,0 +1,73 @@import Mathlib.Data.Real.Basic structure AddGroup₁ (α : Type _) where add : α → α → α zero : α neg : α → α add_assoc : ∀ x y z : α, add (add x y) z = add x (add y z) add_zero : ∀ x : α, add x zero = x zero_add : ∀ x : α, add x zero = x add_left_neg : ∀ x : α, add (neg x) x = zero @[ext] structure Point where x : ℝ y : ℝ z : ℝ namespace Point def add (a b : Point) : Point := ⟨a.x + b.x, a.y + b.y, a.z + b.z⟩ def neg (a : Point) : Point := ⟨-a.x, -a.y, -a.z⟩ def zero : Point := ⟨0, 0, 0⟩ def addGroupPoint : AddGroup₁ Point where add := Point.add zero := Point.zero neg := Point.neg add_assoc := by simp [Point.add, add_assoc] add_zero := by simp [Point.add, Point.zero] zero_add := by simp [Point.add, Point.zero] add_left_neg := by simp [Point.add, Point.neg, Point.zero] end Point class AddGroup₂ (α : Type _) where add : α → α → α zero : α neg : α → α add_assoc : ∀ x y z : α, add (add x y) z = add x (add y z) add_zero : ∀ x : α, add x zero = x zero_add : ∀ x : α, add x zero = x add_left_neg : ∀ x : α, add (neg x) x = zero instance hasAddAddGroup₂ {α : Type _} [AddGroup₂ α] : Add α := ⟨AddGroup₂.add⟩ instance hasZeroAddGroup₂ {α : Type _} [AddGroup₂ α] : Zero α := ⟨AddGroup₂.zero⟩ instance hasNegAddGroup₂ {α : Type _} [AddGroup₂ α] : Neg α := ⟨AddGroup₂.neg⟩ instance : AddGroup₂ Point where add := Point.add zero := Point.zero neg := Point.neg add_assoc := by simp [Point.add, add_assoc] add_zero := by simp [Point.add, Point.zero] zero_add := by simp [Point.add, Point.zero] add_left_neg := by simp [Point.add, Point.neg, Point.zero] section variable (x y : Point) #check x + -y + 0 end
-
-
-
@@ -0,0 +1,290 @@import Mathlib.Data.Int.Basic import Mathlib.Algebra.EuclideanDomain.Basic import Mathlib.RingTheory.PrincipalIdealDomain import Mathlib.Tactic @[ext] structure gaussInt where re : ℤ im : ℤ namespace gaussInt instance : Zero gaussInt := ⟨⟨0, 0⟩⟩ instance : One gaussInt := ⟨⟨1, 0⟩⟩ instance : Add gaussInt := ⟨fun x y => ⟨x.re + y.re, x.im + y.im⟩⟩ instance : Neg gaussInt := ⟨fun x => ⟨-x.re, -x.im⟩⟩ instance : Mul gaussInt := ⟨fun x y => ⟨x.re * y.re - x.im * y.im, x.re * y.im + x.im * y.re⟩⟩ theorem zero_def : (0 : gaussInt) = ⟨0, 0⟩ := rfl theorem one_def : (1 : gaussInt) = ⟨1, 0⟩ := rfl theorem add_def (x y : gaussInt) : x + y = ⟨x.re + y.re, x.im + y.im⟩ := rfl theorem neg_def (x : gaussInt) : -x = ⟨-x.re, -x.im⟩ := rfl theorem mul_def (x y : gaussInt) : x * y = ⟨x.re * y.re - x.im * y.im, x.re * y.im + x.im * y.re⟩ := rfl @[simp] theorem zero_re : (0 : gaussInt).re = 0 := rfl @[simp] theorem zero_im : (0 : gaussInt).im = 0 := rfl @[simp] theorem one_re : (1 : gaussInt).re = 1 := rfl @[simp] theorem one_im : (1 : gaussInt).im = 0 := rfl @[simp] theorem add_re (x y : gaussInt) : (x + y).re = x.re + y.re := rfl @[simp] theorem add_im (x y : gaussInt) : (x + y).im = x.im + y.im := rfl @[simp] theorem neg_re (x : gaussInt) : (-x).re = -x.re := rfl @[simp] theorem neg_im (x : gaussInt) : (-x).im = -x.im := rfl @[simp] theorem mul_re (x y : gaussInt) : (x * y).re = x.re * y.re - x.im * y.im := rfl @[simp] theorem mul_im (x y : gaussInt) : (x * y).im = x.re * y.im + x.im * y.re := rfl instance instCommRing : CommRing gaussInt where zero := 0 one := 1 add := (· + ·) neg x := -x mul := (· * ·) add_assoc := by intros ext <;> simp <;> ring zero_add := by intro ext <;> simp add_zero := by intro ext <;> simp add_left_neg := by intro ext <;> simp add_comm := by intros ext <;> simp <;> ring mul_assoc := by intros ext <;> simp <;> ring one_mul := by intro ext <;> simp mul_one := by intro ext <;> simp left_distrib := by intros ext <;> simp <;> ring right_distrib := by intros ext <;> simp <;> ring mul_comm := by intros ext <;> simp <;> ring zero_mul := sorry mul_zero := sorry instance : Nontrivial gaussInt := by use 0, 1 rw [Ne, gaussInt.ext_iff] simp end gaussInt namespace Int def div' (a b : ℤ) := (a + b / 2) / b def mod' (a b : ℤ) := (a + b / 2) % b - b / 2 theorem div'_add_mod' (a b : ℤ) : b * div' a b + mod' a b = a := by rw [div', mod'] linarith [Int.ediv_add_emod (a + b / 2) b] theorem abs_mod'_le (a b : ℤ) (h : 0 < b) : abs (mod' a b) ≤ b / 2 := by rw [mod', abs_le] constructor · linarith [Int.emod_nonneg (a + b / 2) h.ne'] have := Int.emod_lt_of_pos (a + b / 2) h have := Int.ediv_add_emod b 2 have := Int.emod_lt_of_pos b zero_lt_two revert this; intro this -- FIXME, this should not be needed linarith theorem mod'_eq (a b : ℤ) : mod' a b = a - b * div' a b := by linarith [div'_add_mod' a b] end Int private theorem aux {α : Type _} [LinearOrderedRing α] {x y : α} (h : x ^ 2 + y ^ 2 = 0) : x = 0 := haveI h' : x ^ 2 = 0 := by apply le_antisymm _ (sq_nonneg x) rw [← h] apply le_add_of_nonneg_right (sq_nonneg y) pow_eq_zero h' theorem sq_add_sq_eq_zero {α : Type _} [LinearOrderedRing α] (x y : α) : x ^ 2 + y ^ 2 = 0 ↔ x = 0 ∧ y = 0 := by constructor · intro h constructor · exact aux h rw [add_comm] at h exact aux h rintro ⟨rfl, rfl⟩ norm_num namespace gaussInt def norm (x : gaussInt) := x.re ^ 2 + x.im ^ 2 @[simp] theorem norm_nonneg (x : gaussInt) : 0 ≤ norm x := by apply add_nonneg <;> apply sq_nonneg theorem norm_eq_zero (x : gaussInt) : norm x = 0 ↔ x = 0 := by rw [norm, sq_add_sq_eq_zero, gaussInt.ext_iff] rfl theorem norm_pos (x : gaussInt) : 0 < norm x ↔ x ≠ 0 := by rw [lt_iff_le_and_ne, ne_comm, Ne, norm_eq_zero] simp [norm_nonneg] theorem norm_mul (x y : gaussInt) : norm (x * y) = norm x * norm y := by simp [norm] ring def conj (x : gaussInt) : gaussInt := ⟨x.re, -x.im⟩ @[simp] theorem conj_re (x : gaussInt) : (conj x).re = x.re := rfl @[simp] theorem conj_im (x : gaussInt) : (conj x).im = -x.im := rfl theorem norm_conj (x : gaussInt) : norm (conj x) = norm x := by simp [norm] instance : Div gaussInt := ⟨fun x y => ⟨Int.div' (x * conj y).re (norm y), Int.div' (x * conj y).im (norm y)⟩⟩ instance : Mod gaussInt := ⟨fun x y => x - y * (x / y)⟩ theorem div_def (x y : gaussInt) : x / y = ⟨Int.div' (x * conj y).re (norm y), Int.div' (x * conj y).im (norm y)⟩ := rfl theorem mod_def (x y : gaussInt) : x % y = x - y * (x / y) := rfl theorem norm_mod_lt (x : gaussInt) {y : gaussInt} (hy : y ≠ 0) : (x % y).norm < y.norm := by have norm_y_pos : 0 < norm y := by rwa [norm_pos] have : x % y * conj y = ⟨Int.mod' (x * conj y).re (norm y), Int.mod' (x * conj y).im (norm y)⟩ := by rw [mod_def, sub_mul, Int.mod'_eq, Int.mod'_eq, sub_eq_add_neg, div_def, norm] ext <;> simp <;> ring have : norm (x % y) * norm y ≤ norm y / 2 * norm y := by conv => lhs rw [← norm_conj y, ← norm_mul, this, norm] simp trans 2 * (y.norm / 2) ^ 2 · rw [two_mul] apply add_le_add <;> · rw [sq_le_sq] apply le_trans (Int.abs_mod'_le _ _ norm_y_pos) apply le_abs_self rw [pow_two, ← mul_assoc, mul_comm, mul_comm (2 : ℤ)] apply mul_le_mul_of_nonneg_left · apply Int.ediv_mul_le norm_num apply Int.ediv_nonneg (norm_nonneg y) norm_num have : norm (x % y) ≤ norm y / 2 := le_of_mul_le_mul_right this norm_y_pos apply lt_of_le_of_lt this apply Int.ediv_lt_of_lt_mul · norm_num linarith theorem coe_natAbs_norm (x : gaussInt) : (x.norm.natAbs : ℤ) = x.norm := Int.natAbs_of_nonneg (norm_nonneg _) theorem natAbs_norm_mod_lt (x y : gaussInt) (hy : y ≠ 0) : (x % y).norm.natAbs < y.norm.natAbs := by apply Int.ofNat_lt.1 simp only [Int.coe_natAbs, abs_of_nonneg, norm_nonneg] apply norm_mod_lt x hy theorem not_norm_mul_left_lt_norm (x : gaussInt) {y : gaussInt} (hy : y ≠ 0) : ¬(norm (x * y)).natAbs < (norm x).natAbs := by apply not_lt_of_ge rw [norm_mul, Int.natAbs_mul] apply le_mul_of_one_le_right (Nat.zero_le _) apply Int.ofNat_le.1 rw [coe_natAbs_norm] exact Int.add_one_le_of_lt ((norm_pos _).mpr hy) instance : EuclideanDomain gaussInt := { gaussInt.instCommRing with quotient := (· / ·) remainder := (· % ·) quotient_mul_add_remainder_eq := fun x y => by simp only; rw [mod_def, add_comm, sub_add_cancel] quotient_zero := fun x => by simp [div_def, norm, Int.div'] rfl r := Measure (Int.natAbs ∘ norm) r_wellFounded := (measure (Int.natAbs ∘ norm)).2 remainder_lt := natAbs_norm_mod_lt mul_left_not_lt := not_norm_mul_left_lt_norm } example (x : gaussInt) : Irreducible x ↔ Prime x := PrincipalIdealRing.irreducible_iff_prime end gaussInt
-
-
-
@@ -139,7 +139,7 @@ instance : Nontrivial gaussInt := byend gaussInt example (a b : ℤ) : a = b * (a / b) + a % b := Eq.symm <| Int.ediv_add_emod a b Eq.symm (Int.ediv_add_emod a b) example (a b : ℤ) : b ≠ 0 → 0 ≤ a % b := Int.emod_nonneg a
-
-
-
@@ -92,8 +92,7 @@ example (P Q R : ℕ → Prop) (hP : ∀ᶠ n in atTop, P n) (hQ : ∀ᶠ n in aexample (P Q R : ℕ → Prop) (hP : ∀ᶠ n in atTop, P n) (hQ : ∀ᶠ n in atTop, Q n) (hR : ∀ᶠ n in atTop, P n ∧ Q n → R n) : ∀ᶠ n in atTop, R n := by filter_upwards [hP, hQ, hR] intro n h h' h'' filter_upwards [hP, hQ, hR] with n h h' h'' exact h'' ⟨h, h'⟩ #check mem_closure_iff_clusterPt
-
-
-
@@ -13,10 +13,10 @@ example : IsOpen (univ : Set X) :=example : IsOpen (∅ : Set X) := isOpen_empty example {ι : Type _} {s : ι → Set X} (hs : ∀ i, IsOpen <| s i) : IsOpen (⋃ i, s i) := example {ι : Type _} {s : ι → Set X} (hs : ∀ i, IsOpen (s i)) : IsOpen (⋃ i, s i) := isOpen_iUnion hs example {ι : Type _} [Fintype ι] {s : ι → Set X} (hs : ∀ i, IsOpen <| s i) : example {ι : Type _} [Fintype ι] {s : ι → Set X} (hs : ∀ i, IsOpen (s i)) : IsOpen (⋂ i, s i) := isOpen_iInter hs
-
@@ -38,7 +38,7 @@ example (x : X) : pure x ≤ 𝓝 x :=pure_le_nhds x example (x : X) (P : X → Prop) (h : ∀ᶠ y in 𝓝 x, P y) : P x := pure_le_nhds x h h.self_of_nhds example {P : X → Prop} {x : X} (h : ∀ᶠ y in 𝓝 x, P y) : ∀ᶠ y in 𝓝 x, ∀ᶠ z in 𝓝 y, P z := eventually_eventually_nhds.mpr h
-
@@ -84,7 +84,7 @@ example {Z : Type _} (f : X → Y) (T_X : TopologicalSpace X) (T_Z : Topological@Continuous X Z T_X T_Z (g ∘ f) := by rw [continuous_iff_coinduced_le, coinduced_compose, continuous_iff_coinduced_le] example (ι : Type _) (X : ι → Type _) (T_X : ∀ i, TopologicalSpace <| X i) : example (ι : Type _) (X : ι → Type _) (T_X : ∀ i, TopologicalSpace (X i)) : (Pi.topologicalSpace : TopologicalSpace (∀ i, X i)) = ⨅ i, TopologicalSpace.induced (fun x ↦ x i) (T_X i) := rfl
-
@@ -109,7 +109,7 @@ theorem aux {X Y A : Type _} [TopologicalSpace X] {c : A → X}example [TopologicalSpace X] [TopologicalSpace Y] [RegularSpace Y] {A : Set X} (hA : ∀ x, x ∈ closure A) {f : A → Y} (f_cont : Continuous f) (hf : ∀ x : X, ∃ c : Y, Tendsto f (comap (↑) <| 𝓝 x) <| 𝓝 c) : (hf : ∀ x : X, ∃ c : Y, Tendsto f (comap (↑) (𝓝 x)) (𝓝 c)) : ∃ φ : X → Y, Continuous φ ∧ ∀ a : A, φ a = f a := sorry
-
@@ -150,6 +150,3 @@ example [TopologicalSpace Y] {f : X → Y} (hf : Continuous f) {s : Set X} (hs :example {ι : Type _} {s : Set X} (hs : IsCompact s) (U : ι → Set X) (hUo : ∀ i, IsOpen (U i)) (hsU : s ⊆ ⋃ i, U i) : ∃ t : Finset ι, s ⊆ ⋃ i ∈ t, U i := hs.elim_finite_subcover U hUo hsU example [CompactSpace X] : IsCompact (univ : Set X) := isCompact_univ
-
-
-
@@ -13,10 +13,10 @@ example : IsOpen (univ : Set X) :=example : IsOpen (∅ : Set X) := isOpen_empty example {ι : Type _} {s : ι → Set X} (hs : ∀ i, IsOpen <| s i) : IsOpen (⋃ i, s i) := example {ι : Type _} {s : ι → Set X} (hs : ∀ i, IsOpen (s i)) : IsOpen (⋃ i, s i) := isOpen_iUnion hs example {ι : Type _} [Fintype ι] {s : ι → Set X} (hs : ∀ i, IsOpen <| s i) : example {ι : Type _} [Fintype ι] {s : ι → Set X} (hs : ∀ i, IsOpen (s i)) : IsOpen (⋂ i, s i) := isOpen_iInter hs
-
@@ -38,7 +38,7 @@ example (x : X) : pure x ≤ 𝓝 x :=pure_le_nhds x example (x : X) (P : X → Prop) (h : ∀ᶠ y in 𝓝 x, P y) : P x := pure_le_nhds x h h.self_of_nhds example {P : X → Prop} {x : X} (h : ∀ᶠ y in 𝓝 x, P y) : ∀ᶠ y in 𝓝 x, ∀ᶠ z in 𝓝 y, P z := eventually_eventually_nhds.mpr h
-
@@ -92,7 +92,7 @@ example {Z : Type _} (f : X → Y) (T_X : TopologicalSpace X) (T_Z : Topological@Continuous X Z T_X T_Z (g ∘ f) := by rw [continuous_iff_coinduced_le, coinduced_compose, continuous_iff_coinduced_le] example (ι : Type _) (X : ι → Type _) (T_X : ∀ i, TopologicalSpace <| X i) : example (ι : Type _) (X : ι → Type _) (T_X : ∀ i, TopologicalSpace (X i)) : (Pi.topologicalSpace : TopologicalSpace (∀ i, X i)) = ⨅ i, TopologicalSpace.induced (fun x ↦ x i) (T_X i) := rfl
-
@@ -123,7 +123,7 @@ example {X Y A : Type _} [TopologicalSpace X] {c : A → X}example [TopologicalSpace X] [TopologicalSpace Y] [RegularSpace Y] {A : Set X} (hA : ∀ x, x ∈ closure A) {f : A → Y} (f_cont : Continuous f) (hf : ∀ x : X, ∃ c : Y, Tendsto f (comap (↑) <| 𝓝 x) <| 𝓝 c) : (hf : ∀ x : X, ∃ c : Y, Tendsto f (comap (↑) (𝓝 x)) (𝓝 c)) : ∃ φ : X → Y, Continuous φ ∧ ∀ a : A, φ a = f a := sorry
-
@@ -131,7 +131,7 @@ example [TopologicalSpace X] [TopologicalSpace Y] [RegularSpace Y] {A : Set X}example [TopologicalSpace X] [TopologicalSpace Y] [T3Space Y] {A : Set X} (hA : ∀ x, x ∈ closure A) {f : A → Y} (f_cont : Continuous f) (hf : ∀ x : X, ∃ c : Y, Tendsto f (comap (↑) <| 𝓝 x) <| 𝓝 c) : (hf : ∀ x : X, ∃ c : Y, Tendsto f (comap (↑) (𝓝 x)) (𝓝 c)) : ∃ φ : X → Y, Continuous φ ∧ ∀ a : A, φ a = f a := by choose φ hφ using hf use φ
-
@@ -150,7 +150,7 @@ example [TopologicalSpace X] [TopologicalSpace Y] [T3Space Y] {A : Set X} (hA :apply V'_closed.mem_of_tendsto (hφ y) exact mem_of_superset (preimage_mem_comap hVx) hV · intro a have lim : Tendsto f (𝓝 a) (𝓝 <| φ a) := by simpa [nhds_induced] using hφ a have lim : Tendsto f (𝓝 a) (𝓝 (φ a)) := by simpa [nhds_induced] using hφ a exact tendsto_nhds_unique lim f_cont.continuousAt example [TopologicalSpace X] [TopologicalSpace.FirstCountableTopology X]
-
@@ -202,6 +202,3 @@ example [TopologicalSpace Y] {f : X → Y} (hf : Continuous f) {s : Set X} (hs :example {ι : Type _} {s : Set X} (hs : IsCompact s) (U : ι → Set X) (hUo : ∀ i, IsOpen (U i)) (hsU : s ⊆ ⋃ i, U i) : ∃ t : Finset ι, s ⊆ ⋃ i ∈ t, U i := hs.elim_finite_subcover U hUo hsU example [CompactSpace X] : IsCompact (univ : Set X) := isCompact_univ
-
-
-
@@ -1,4 +1,4 @@# Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. config: 803b947a09f3db5a52c6c529e3761a53 config: 9821478498fa33697c987b601aae688f tags: 645f666f9bcd5a90fca523b33c5a78b7
-
-
-
@@ -1,7 +1,8 @@<!DOCTYPE html> <html class="writer-html5" lang="en" > <head> <meta charset="utf-8" /> <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>1. Introduction — Mathematics in Lean 0.1 documentation</title> <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
-
@@ -15,6 +16,7 @@<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script> <script src="_static/jquery.js"></script> <script src="_static/underscore.js"></script> <script src="_static/_sphinx_javascript_frameworks_compat.js"></script> <script src="_static/doctools.js"></script> <script src="_static/js/theme.js"></script> <link rel="index" title="Index" href="genindex.html" />
-
@@ -82,10 +84,10 @@<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> <div itemprop="articleBody"> <div class="section" id="introduction"> <span id="id1"></span><h1><span class="section-number">1. </span>Introduction<a class="headerlink" href="#introduction" title="Permalink to this headline"></a></h1> <div class="section" id="getting-started"> <h2><span class="section-number">1.1. </span>Getting Started<a class="headerlink" href="#getting-started" title="Permalink to this headline"></a></h2> <section id="introduction"> <span id="id1"></span><h1><span class="section-number">1. </span>Introduction<a class="headerlink" href="#introduction" title="Permalink to this heading"></a></h1> <section id="getting-started"> <h2><span class="section-number">1.1. </span>Getting Started<a class="headerlink" href="#getting-started" title="Permalink to this heading"></a></h2> <p>The goal of this book is to teach you to formalize mathematics using the Lean 4 interactive proof assistant. It assumes that you know some mathematics, but it does not require much.
-
@@ -177,9 +179,9 @@ You don’t have to do all of them; when you feel comfortable that you havethe relevant skills, feel free to move on. You can always compare your solutions to the ones in the <code class="docutils literal notranslate"><span class="pre">solutions</span></code> folder associated with each section.</p> </div> <div class="section" id="overview"> <h2><span class="section-number">1.2. </span>Overview<a class="headerlink" href="#overview" title="Permalink to this headline"></a></h2> </section> <section id="overview"> <h2><span class="section-number">1.2. </span>Overview<a class="headerlink" href="#overview" title="Permalink to this heading"></a></h2> <p>Put simply, Lean is a tool for building complex expressions in a formal language known as <em>dependent type theory</em>.</p> <p id="index-0">Every expression has a <em>type</em>, and you can use the <cite>#check</cite> command to
-
@@ -348,8 +350,8 @@ Giovanni Mascellani, Hunter Monroe, Pietro Monticone, Oliver Nash,Bartosz Piotrowski, and Guilherme Silva. Our work has been partially supported by the Hoskinson Center for Formal Mathematics.</p> </div> </div> </section> </section> </div>
-
-
-
@@ -1,7 +1,8 @@<!DOCTYPE html> <html class="writer-html5" lang="en" > <head> <meta charset="utf-8" /> <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>2. Basics — Mathematics in Lean 0.1 documentation</title> <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
-
@@ -15,6 +16,7 @@<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script> <script src="_static/jquery.js"></script> <script src="_static/underscore.js"></script> <script src="_static/_sphinx_javascript_frameworks_compat.js"></script> <script src="_static/doctools.js"></script> <script async="async" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script> <script src="_static/js/theme.js"></script>
-
@@ -86,14 +88,14 @@<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> <div itemprop="articleBody"> <div class="section" id="basics"> <span id="id1"></span><h1><span class="section-number">2. </span>Basics<a class="headerlink" href="#basics" title="Permalink to this headline"></a></h1> <section id="basics"> <span id="id1"></span><h1><span class="section-number">2. </span>Basics<a class="headerlink" href="#basics" title="Permalink to this heading"></a></h1> <p>This chapter is designed to introduce you to the nuts and bolts of mathematical reasoning in Lean: calculating, applying lemmas and theorems, and reasoning about generic structures.</p> <div class="section" id="calculating"> <h2><span class="section-number">2.1. </span>Calculating<a class="headerlink" href="#calculating" title="Permalink to this headline"></a></h2> <section id="calculating"> <h2><span class="section-number">2.1. </span>Calculating<a class="headerlink" href="#calculating" title="Permalink to this heading"></a></h2> <p>We generally learn to carry out mathematical calculations without thinking of them as proofs. But when we justify each step in a calculation,
-
@@ -386,9 +388,9 @@ occurrence of <code class="docutils literal notranslate"><span class="pre">a</sp<span class="n">rw</span> <span class="o">[</span><span class="n">add_mul</span><span class="o">]</span> </pre></div> </div> </div> <div class="section" id="proving-identities-in-algebraic-structures"> <span id="id2"></span><h2><span class="section-number">2.2. </span>Proving Identities in Algebraic Structures<a class="headerlink" href="#proving-identities-in-algebraic-structures" title="Permalink to this headline"></a></h2> </section> <section id="proving-identities-in-algebraic-structures"> <span id="id2"></span><h2><span class="section-number">2.2. </span>Proving Identities in Algebraic Structures<a class="headerlink" href="#proving-identities-in-algebraic-structures" title="Permalink to this heading"></a></h2> <p id="index-7">Mathematically, a ring consists of a collection of objects, <span class="math notranslate nohighlight">\(R\)</span>, operations <span class="math notranslate nohighlight">\(+\)</span> <span class="math notranslate nohighlight">\(\times\)</span>, and constants <span class="math notranslate nohighlight">\(0\)</span> and <span class="math notranslate nohighlight">\(1\)</span>, and an operation <span class="math notranslate nohighlight">\(x \mapsto -x\)</span> such that:</p>
-
@@ -706,9 +708,9 @@ It may seem odd that the algebraic structures are called<cite>noncomm_ring</cite> and <cite>ring</cite>. This is partly for historical reasons, but also for the convenience of using a shorter name for the tactic that deals with commutative rings, since it is used more often.</p> </div> <div class="section" id="using-theorems-and-lemmas"> <span id="id3"></span><h2><span class="section-number">2.3. </span>Using Theorems and Lemmas<a class="headerlink" href="#using-theorems-and-lemmas" title="Permalink to this headline"></a></h2> </section> <section id="using-theorems-and-lemmas"> <span id="id3"></span><h2><span class="section-number">2.3. </span>Using Theorems and Lemmas<a class="headerlink" href="#using-theorems-and-lemmas" title="Permalink to this heading"></a></h2> <p id="index-16">Rewriting is great for proving equations, but what about other sorts of theorems? For example, how can we prove an inequality,
-
@@ -973,9 +975,9 @@ following theorem. You can use the theorem <code class="docutils literal notrans</div> <p>If you managed to solve this, congratulations! You are well on your way to becoming a master formalizer.</p> </div> <div class="section" id="more-examples-using-apply-and-rw"> <span id="more-on-order-and-divisibility"></span><h2><span class="section-number">2.4. </span>More examples using apply and rw<a class="headerlink" href="#more-examples-using-apply-and-rw" title="Permalink to this headline"></a></h2> </section> <section id="more-examples-using-apply-and-rw"> <span id="more-on-order-and-divisibility"></span><h2><span class="section-number">2.4. </span>More examples using apply and rw<a class="headerlink" href="#more-examples-using-apply-and-rw" title="Permalink to this heading"></a></h2> <p id="index-21">The <code class="docutils literal notranslate"><span class="pre">min</span></code> function on the real numbers is uniquely characterized by the following three facts:</p> <div class="highlight-lean notranslate"><div class="highlight"><pre><span></span><span class="k">#check</span> <span class="o">(</span><span class="n">min_le_left</span> <span class="n">a</span> <span class="n">b</span> <span class="o">:</span> <span class="n">min</span> <span class="n">a</span> <span class="n">b</span> <span class="bp">≤</span> <span class="n">a</span><span class="o">)</span>
-
@@ -1184,9 +1186,9 @@ prove the following:</p><dt>either one will work.</dt><dd><p>either one will work.</p> </dd> </dl> </div> <div class="section" id="proving-facts-about-algebraic-structures"> <span id="id4"></span><h2><span class="section-number">2.5. </span>Proving Facts about Algebraic Structures<a class="headerlink" href="#proving-facts-about-algebraic-structures" title="Permalink to this headline"></a></h2> </section> <section id="proving-facts-about-algebraic-structures"> <span id="id4"></span><h2><span class="section-number">2.5. </span>Proving Facts about Algebraic Structures<a class="headerlink" href="#proving-facts-about-algebraic-structures" title="Permalink to this heading"></a></h2> <p id="index-27">In <a class="reference internal" href="#proving-identities-in-algebraic-structures"><span class="std std-numref">Section 2.2</span></a>, we saw that many common identities governing the real numbers hold in more general classes of algebraic structures,
-
@@ -1399,8 +1401,8 @@ always nonnegative:</p></div> <p>We recommend making use of the theorem <code class="docutils literal notranslate"><span class="pre">nonneg_of_mul_nonneg_left</span></code>. As you may have guessed, this theorem is called <code class="docutils literal notranslate"><span class="pre">dist_nonneg</span></code> in mathlib.</p> </div> </div> </section> </section> </div>
-
-
-
@@ -1,7 +1,8 @@<!DOCTYPE html> <html class="writer-html5" lang="en" > <head> <meta charset="utf-8" /> <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>3. Logic — Mathematics in Lean 0.1 documentation</title> <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
-
@@ -15,6 +16,7 @@<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script> <script src="_static/jquery.js"></script> <script src="_static/underscore.js"></script> <script src="_static/_sphinx_javascript_frameworks_compat.js"></script> <script src="_static/doctools.js"></script> <script async="async" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script> <script src="_static/js/theme.js"></script>
-
@@ -87,8 +89,8 @@<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> <div itemprop="articleBody"> <div class="section" id="logic"> <span id="id1"></span><h1><span class="section-number">3. </span>Logic<a class="headerlink" href="#logic" title="Permalink to this headline"></a></h1> <section id="logic"> <span id="id1"></span><h1><span class="section-number">3. </span>Logic<a class="headerlink" href="#logic" title="Permalink to this heading"></a></h1> <p>In the last chapter, we dealt with equations, inequalities, and basic mathematical statements like “<span class="math notranslate nohighlight">\(x\)</span> divides <span class="math notranslate nohighlight">\(y\)</span>.”
-
@@ -98,8 +100,8 @@ using logical terms like “and,” “or,” “not,”“if … then,” “every,” and “some.” In this chapter, we show you how to work with statements that are built up in this way.</p> <div class="section" id="implication-and-the-universal-quantifier"> <span id="id2"></span><h2><span class="section-number">3.1. </span>Implication and the Universal Quantifier<a class="headerlink" href="#implication-and-the-universal-quantifier" title="Permalink to this headline"></a></h2> <section id="implication-and-the-universal-quantifier"> <span id="id2"></span><h2><span class="section-number">3.1. </span>Implication and the Universal Quantifier<a class="headerlink" href="#implication-and-the-universal-quantifier" title="Permalink to this heading"></a></h2> <p>Consider the statement after the <code class="docutils literal notranslate"><span class="pre">#check</span></code>:</p> <div class="highlight-lean notranslate"><div class="highlight"><pre><span></span><span class="k">#check</span> <span class="bp">∀</span> <span class="n">x</span> <span class="o">:</span> <span class="n">ℝ</span><span class="o">,</span> <span class="mi">0</span> <span class="bp">≤</span> <span class="n">x</span> <span class="bp">→</span> <span class="bp">|</span><span class="n">x</span><span class="bp">|</span> <span class="bp">=</span> <span class="n">x</span> </pre></div>
-
@@ -487,9 +489,9 @@ a lemma name.</p><span class="gr">sorry</span> </pre></div> </div> </div> <div class="section" id="the-existential-quantifier"> <span id="id3"></span><h2><span class="section-number">3.2. </span>The Existential Quantifier<a class="headerlink" href="#the-existential-quantifier" title="Permalink to this headline"></a></h2> </section> <section id="the-existential-quantifier"> <span id="id3"></span><h2><span class="section-number">3.2. </span>The Existential Quantifier<a class="headerlink" href="#the-existential-quantifier" title="Permalink to this heading"></a></h2> <p>The existential quantifier, which can be entered as <code class="docutils literal notranslate"><span class="pre">\ex</span></code> in VS Code, is used to represent the phrase “there exists.” The formal expression <code class="docutils literal notranslate"><span class="pre">∃</span> <span class="pre">x</span> <span class="pre">:</span> <span class="pre">ℝ,</span> <span class="pre">2</span> <span class="pre"><</span> <span class="pre">x</span> <span class="pre">∧</span> <span class="pre">x</span> <span class="pre"><</span> <span class="pre">3</span></code> in Lean says
-
@@ -794,9 +796,9 @@ the composition of surjective functions is surjective.</p><span class="gr">sorry</span> </pre></div> </div> </div> <div class="section" id="negation"> <span id="id4"></span><h2><span class="section-number">3.3. </span>Negation<a class="headerlink" href="#negation" title="Permalink to this headline"></a></h2> </section> <section id="negation"> <span id="id4"></span><h2><span class="section-number">3.3. </span>Negation<a class="headerlink" href="#negation" title="Permalink to this heading"></a></h2> <p>The symbol <code class="docutils literal notranslate"><span class="pre">¬</span></code> is meant to express negation, so <code class="docutils literal notranslate"><span class="pre">¬</span> <span class="pre">x</span> <span class="pre"><</span> <span class="pre">y</span></code> says that <code class="docutils literal notranslate"><span class="pre">x</span></code> is not less than <code class="docutils literal notranslate"><span class="pre">y</span></code>, <code class="docutils literal notranslate"><span class="pre">¬</span> <span class="pre">x</span> <span class="pre">=</span> <span class="pre">y</span></code> (or, equivalently, <code class="docutils literal notranslate"><span class="pre">x</span> <span class="pre">≠</span> <span class="pre">y</span></code>) says that
-
@@ -1061,9 +1063,9 @@ Finally, the <code class="docutils literal notranslate"><span class="pre">contraby finding a contradiction in the hypotheses, such as a pair of the form <code class="docutils literal notranslate"><span class="pre">h</span> <span class="pre">:</span> <span class="pre">P</span></code> and <code class="docutils literal notranslate"><span class="pre">h'</span> <span class="pre">:</span> <span class="pre">¬</span> <span class="pre">P</span></code>. Of course, in this example, <code class="docutils literal notranslate"><span class="pre">linarith</span></code> also works.</p> </div> <div class="section" id="conjunction-and-bi-implication"> <span id="conjunction-and-biimplication"></span><h2><span class="section-number">3.4. </span>Conjunction and Bi-implication<a class="headerlink" href="#conjunction-and-bi-implication" title="Permalink to this headline"></a></h2> </section> <section id="conjunction-and-bi-implication"> <span id="conjunction-and-biimplication"></span><h2><span class="section-number">3.4. </span>Conjunction and Bi-implication<a class="headerlink" href="#conjunction-and-bi-implication" title="Permalink to this heading"></a></h2> <p id="index-18">You have already seen that the conjunction symbol, <code class="docutils literal notranslate"><span class="pre">∧</span></code>, is used to express “and.” The <code class="docutils literal notranslate"><span class="pre">constructor</span></code> tactic allows you to prove a statement of
-
@@ -1322,9 +1324,9 @@ to be instantiated to different values.</p><span class="gr">sorry</span> </pre></div> </div> </div> <div class="section" id="disjunction"> <span id="id5"></span><h2><span class="section-number">3.5. </span>Disjunction<a class="headerlink" href="#disjunction" title="Permalink to this headline"></a></h2> </section> <section id="disjunction"> <span id="id5"></span><h2><span class="section-number">3.5. </span>Disjunction<a class="headerlink" href="#disjunction" title="Permalink to this heading"></a></h2> <p id="index-21">The canonical way to prove a disjunction <code class="docutils literal notranslate"><span class="pre">A</span> <span class="pre">∨</span> <span class="pre">B</span></code> is to prove <code class="docutils literal notranslate"><span class="pre">A</span></code> or to prove <code class="docutils literal notranslate"><span class="pre">B</span></code>. The <code class="docutils literal notranslate"><span class="pre">left</span></code> tactic chooses <code class="docutils literal notranslate"><span class="pre">A</span></code>,
-
@@ -1565,9 +1567,9 @@ using <code class="docutils literal notranslate"><span class="pre">by_cases</spa<span class="gr">sorry</span> </pre></div> </div> </div> <div class="section" id="sequences-and-convergence"> <span id="id6"></span><h2><span class="section-number">3.6. </span>Sequences and Convergence<a class="headerlink" href="#sequences-and-convergence" title="Permalink to this headline"></a></h2> </section> <section id="sequences-and-convergence"> <span id="id6"></span><h2><span class="section-number">3.6. </span>Sequences and Convergence<a class="headerlink" href="#sequences-and-convergence" title="Permalink to this heading"></a></h2> <p>We now have enough skills at our disposal to do some real mathematics. In Lean, we can represent a sequence <span class="math notranslate nohighlight">\(s_0, s_1, s_2, \ldots\)</span> of real numbers as a function <code class="docutils literal notranslate"><span class="pre">s</span> <span class="pre">:</span> <span class="pre">ℕ</span> <span class="pre">→</span> <span class="pre">ℝ</span></code>.
-
@@ -1802,8 +1804,8 @@ for dealing with convergence in vastly more general terms,not only abstracting away particular features of the domain and codomain, but also abstracting over different types of convergence.</p> </div> </div> </section> </section> </div>
-
-
-
@@ -1,7 +1,8 @@<!DOCTYPE html> <html class="writer-html5" lang="en" > <head> <meta charset="utf-8" /> <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>4. Sets and Functions — Mathematics in Lean 0.1 documentation</title> <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
-
@@ -15,6 +16,7 @@<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script> <script src="_static/jquery.js"></script> <script src="_static/underscore.js"></script> <script src="_static/_sphinx_javascript_frameworks_compat.js"></script> <script src="_static/doctools.js"></script> <script async="async" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script> <script src="_static/js/theme.js"></script>
-
@@ -84,8 +86,8 @@<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> <div itemprop="articleBody"> <div class="section" id="sets-and-functions"> <span id="id1"></span><h1><span class="section-number">4. </span>Sets and Functions<a class="headerlink" href="#sets-and-functions" title="Permalink to this headline"></a></h1> <section id="sets-and-functions"> <span id="id1"></span><h1><span class="section-number">4. </span>Sets and Functions<a class="headerlink" href="#sets-and-functions" title="Permalink to this heading"></a></h1> <p>The vocabulary of sets, relations, and functions provides a uniform language for carrying out constructions in all the branches of mathematics.
-
@@ -117,8 +119,8 @@ such as a set natural numbers or a set of functionsfrom real numbers to real numbers. The distinction between types and set takes some getting used to, but this chapter will take you through the essentials.</p> <div class="section" id="sets"> <span id="id2"></span><h2><span class="section-number">4.1. </span>Sets<a class="headerlink" href="#sets" title="Permalink to this headline"></a></h2> <section id="sets"> <span id="id2"></span><h2><span class="section-number">4.1. </span>Sets<a class="headerlink" href="#sets" title="Permalink to this heading"></a></h2> <p id="index-0">If <code class="docutils literal notranslate"><span class="pre">α</span></code> is any type, the type <code class="docutils literal notranslate"><span class="pre">Set</span> <span class="pre">α</span></code> consists of sets of elements of <code class="docutils literal notranslate"><span class="pre">α</span></code>. This type supports the usual set-theoretic operations and relations.
-
@@ -555,9 +557,9 @@ and intersection.</p></div> <p>In the library, these identities are called <code class="docutils literal notranslate"><span class="pre">sUnion_eq_biUnion</span></code> and <code class="docutils literal notranslate"><span class="pre">sInter_eq_biInter</span></code>.</p> </div> <div class="section" id="functions"> <span id="id3"></span><h2><span class="section-number">4.2. </span>Functions<a class="headerlink" href="#functions" title="Permalink to this headline"></a></h2> </section> <section id="functions"> <span id="id3"></span><h2><span class="section-number">4.2. </span>Functions<a class="headerlink" href="#functions" title="Permalink to this heading"></a></h2> <p>If <code class="docutils literal notranslate"><span class="pre">f</span> <span class="pre">:</span> <span class="pre">α</span> <span class="pre">→</span> <span class="pre">β</span></code> is a function and <code class="docutils literal notranslate"><span class="pre">p</span></code> is a set of elements of type <code class="docutils literal notranslate"><span class="pre">β</span></code>, the library defines <code class="docutils literal notranslate"><span class="pre">preimage</span> <span class="pre">f</span> <span class="pre">p</span></code>, written <code class="docutils literal notranslate"><span class="pre">f</span> <span class="pre">⁻¹'</span> <span class="pre">p</span></code>,
-
@@ -882,9 +884,9 @@ and then fill in the two lines that are missing.</p><span class="n">contradiction</span> </pre></div> </div> </div> <div class="section" id="the-schroder-bernstein-theorem"> <span id="the-schroeder-bernstein-theorem"></span><h2><span class="section-number">4.3. </span>The Schröder-Bernstein Theorem<a class="headerlink" href="#the-schroder-bernstein-theorem" title="Permalink to this headline"></a></h2> </section> <section id="the-schroder-bernstein-theorem"> <span id="the-schroeder-bernstein-theorem"></span><h2><span class="section-number">4.3. </span>The Schröder-Bernstein Theorem<a class="headerlink" href="#the-schroder-bernstein-theorem" title="Permalink to this heading"></a></h2> <p>We close this chapter with an elementary but nontrivial theorem of set theory. Let <span class="math notranslate nohighlight">\(\alpha\)</span> and <span class="math notranslate nohighlight">\(\beta\)</span> be sets. (In our formalization, they will actually be types.)
-
@@ -1143,8 +1145,8 @@ and the proof uses the fact that <code class="docutils literal notranslate"><spa<span class="o">⟨</span><span class="n">sbFun</span> <span class="n">f</span> <span class="n">g</span><span class="o">,</span> <span class="n">sb_injective</span> <span class="n">f</span> <span class="n">g</span> <span class="n">hf</span> <span class="n">hg</span><span class="o">,</span> <span class="n">sb_surjective</span> <span class="n">f</span> <span class="n">g</span> <span class="n">hf</span> <span class="n">hg</span><span class="o">⟩</span> </pre></div> </div> </div> </div> </section> </section> </div>
-
-
-
@@ -1,7 +1,8 @@<!DOCTYPE html> <html class="writer-html5" lang="en" > <head> <meta charset="utf-8" /> <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>5. Elementary Number Theory — Mathematics in Lean 0.1 documentation</title> <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
-
@@ -15,6 +16,7 @@<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script> <script src="_static/jquery.js"></script> <script src="_static/underscore.js"></script> <script src="_static/_sphinx_javascript_frameworks_compat.js"></script> <script src="_static/doctools.js"></script> <script async="async" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script> <script src="_static/js/theme.js"></script>
-
@@ -84,15 +86,15 @@<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> <div itemprop="articleBody"> <div class="section" id="elementary-number-theory"> <span id="number-theory"></span><h1><span class="section-number">5. </span>Elementary Number Theory<a class="headerlink" href="#elementary-number-theory" title="Permalink to this headline"></a></h1> <section id="elementary-number-theory"> <span id="number-theory"></span><h1><span class="section-number">5. </span>Elementary Number Theory<a class="headerlink" href="#elementary-number-theory" title="Permalink to this heading"></a></h1> <p>In this chapter, we show you how to formalize some elementary results in number theory. As we deal with more substantive mathematical content, the proofs will get longer and more involved, building on the skills you have already mastered.</p> <div class="section" id="irrational-roots"> <span id="section-irrational-roots"></span><h2><span class="section-number">5.1. </span>Irrational Roots<a class="headerlink" href="#irrational-roots" title="Permalink to this headline"></a></h2> <section id="irrational-roots"> <span id="section-irrational-roots"></span><h2><span class="section-number">5.1. </span>Irrational Roots<a class="headerlink" href="#irrational-roots" title="Permalink to this heading"></a></h2> <p>Let’s start with a fact known to the ancient greeks, namely, that the square root of 2 is irrational. If we suppose otherwise,
-
@@ -391,9 +393,9 @@ and that it takes values in the extended natural numbers <code class="docutils lwhich adds the value infinity to the natural numbers. In the next chapter, we will begin to develop the means to appreciate the way that Lean supports this sort of generality.</p> </div> <div class="section" id="induction-and-recursion"> <span id="section-induction-and-recursion"></span><h2><span class="section-number">5.2. </span>Induction and Recursion<a class="headerlink" href="#induction-and-recursion" title="Permalink to this headline"></a></h2> </section> <section id="induction-and-recursion"> <span id="section-induction-and-recursion"></span><h2><span class="section-number">5.2. </span>Induction and Recursion<a class="headerlink" href="#induction-and-recursion" title="Permalink to this heading"></a></h2> <p>The set of natural numbers <span class="math notranslate nohighlight">\(\mathbb{N} = \{ 0, 1, 2, \ldots \}\)</span> is not only fundamentally important in its own right, but also a plays a central role in the construction of new mathematical objects.
-
@@ -696,9 +698,9 @@ The function <code class="docutils literal notranslate"><span class="pre">pred</<span class="kd">end</span> <span class="n">MyNat</span> </pre></div> </div> </div> <div class="section" id="infinitely-many-primes"> <span id="section-infinitely-many-primes"></span><h2><span class="section-number">5.3. </span>Infinitely Many Primes<a class="headerlink" href="#infinitely-many-primes" title="Permalink to this headline"></a></h2> </section> <section id="infinitely-many-primes"> <span id="section-infinitely-many-primes"></span><h2><span class="section-number">5.3. </span>Infinitely Many Primes<a class="headerlink" href="#infinitely-many-primes" title="Permalink to this heading"></a></h2> <p>Let us continue our exploration of induction and recursion with another mathematical standard: a proof that there are infinitely many primes. One way to formulate this is as the statement that
-
@@ -1138,8 +1140,8 @@ along the way.</p></div> <p>If you managed to complete the proof, congratulations! This has been a serious feat of formalization.</p> </div> </div> </section> </section> </div>
-
-
-
@@ -1,7 +1,8 @@<!DOCTYPE html> <html class="writer-html5" lang="en" > <head> <meta charset="utf-8" /> <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>6. Structures — Mathematics in Lean 0.1 documentation</title> <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
-
@@ -15,6 +16,7 @@<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script> <script src="_static/jquery.js"></script> <script src="_static/underscore.js"></script> <script src="_static/_sphinx_javascript_frameworks_compat.js"></script> <script src="_static/doctools.js"></script> <script async="async" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script> <script src="_static/js/theme.js"></script>
-
@@ -84,8 +86,8 @@<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> <div itemprop="articleBody"> <div class="section" id="structures"> <span id="id1"></span><h1><span class="section-number">6. </span>Structures<a class="headerlink" href="#structures" title="Permalink to this headline"></a></h1> <section id="structures"> <span id="id1"></span><h1><span class="section-number">6. </span>Structures<a class="headerlink" href="#structures" title="Permalink to this heading"></a></h1> <p>Modern mathematics makes essential use of algebraic structures, which encapsulate patterns that can be instantiated in
-
@@ -104,8 +106,8 @@ It will also show you how to define and usealgebraic structures on your own.</p> <p>For more technical detail, you can consult <a class="reference external" href="https://leanprover.github.io/theorem_proving_in_lean/">Theorem Proving in Lean</a>, and a paper by Anne Baanen, <a class="reference external" href="https://arxiv.org/abs/2202.01629">Use and abuse of instance parameters in the Lean mathematical library</a>.</p> <div class="section" id="defining-structures"> <span id="section-structures"></span><h2><span class="section-number">6.1. </span>Defining structures<a class="headerlink" href="#defining-structures" title="Permalink to this headline"></a></h2> <section id="defining-structures"> <span id="section-structures"></span><h2><span class="section-number">6.1. </span>Defining structures<a class="headerlink" href="#defining-structures" title="Permalink to this heading"></a></h2> <p>In the broadest sense of the term, a <em>structure</em> is a specification of a collection of data, possibly with constraints that the data is required to satisfy.
-
@@ -482,9 +484,9 @@ as long as we redefine the old accessors in terms of the new definition.Moreover, as we are about to see, Lean provides support for weaving structures together into a rich, interconnected hierarchy, and for managing the interactions between them.</p> </div> <div class="section" id="algebraic-structures"> <span id="section-algebraic-structures"></span><h2><span class="section-number">6.2. </span>Algebraic Structures<a class="headerlink" href="#algebraic-structures" title="Permalink to this headline"></a></h2> </section> <section id="algebraic-structures"> <span id="section-algebraic-structures"></span><h2><span class="section-number">6.2. </span>Algebraic Structures<a class="headerlink" href="#algebraic-structures" title="Permalink to this heading"></a></h2> <p>To clarify what we mean by the phrase <em>algebraic structure</em>, it will help to consider some examples.</p> <ol class="arabic simple">
-
@@ -1031,9 +1033,9 @@ because it configures automation that invisibly governs the interpretation ofthe expressions we type. When used wisely, however, class inference is a powerful tool. It is what makes algebraic reasoning possible in Lean.</p> </div> <div class="section" id="building-the-gaussian-integers"> <span id="section-building-the-gaussian-integers"></span><h2><span class="section-number">6.3. </span>Building the Gaussian Integers<a class="headerlink" href="#building-the-gaussian-integers" title="Permalink to this headline"></a></h2> </section> <section id="building-the-gaussian-integers"> <span id="section-building-the-gaussian-integers"></span><h2><span class="section-number">6.3. </span>Building the Gaussian Integers<a class="headerlink" href="#building-the-gaussian-integers" title="Permalink to this heading"></a></h2> <p>We will now illustrate the use of the algebraic hierarchy in Lean by building an important mathematical object, the <em>Gaussian integers</em>, and showing that it is a Euclidean domain. In other words, according to
-
@@ -1231,7 +1233,7 @@ result of integer division of <span class="math notranslate nohighlight">\(a\)</to be the remainder. These functions are defined in Lean so that the satisfy the following:</p> <div class="highlight-lean notranslate"><div class="highlight"><pre><span></span><span class="kd">example</span> <span class="o">(</span><span class="n">a</span> <span class="n">b</span> <span class="o">:</span> <span class="n">ℤ</span><span class="o">)</span> <span class="o">:</span> <span class="n">a</span> <span class="bp">=</span> <span class="n">b</span> <span class="bp">*</span> <span class="o">(</span><span class="n">a</span> <span class="bp">/</span> <span class="n">b</span><span class="o">)</span> <span class="bp">+</span> <span class="n">a</span> <span class="bp">%</span> <span class="n">b</span> <span class="o">:=</span> <span class="n">Eq.symm</span> <span class="bp"><|</span> <span class="n">Int.ediv_add_emod</span> <span class="n">a</span> <span class="n">b</span> <span class="n">Eq.symm</span> <span class="o">(</span><span class="n">Int.ediv_add_emod</span> <span class="n">a</span> <span class="n">b</span><span class="o">)</span> <span class="kd">example</span> <span class="o">(</span><span class="n">a</span> <span class="n">b</span> <span class="o">:</span> <span class="n">ℤ</span><span class="o">)</span> <span class="o">:</span> <span class="n">b</span> <span class="bp">≠</span> <span class="mi">0</span> <span class="bp">→</span> <span class="mi">0</span> <span class="bp">≤</span> <span class="n">a</span> <span class="bp">%</span> <span class="n">b</span> <span class="o">:=</span> <span class="n">Int.emod_nonneg</span> <span class="n">a</span>
-
@@ -1527,8 +1529,8 @@ the notions of being prime and being irreducible coincide.</p><span class="n">PrincipalIdealRing.irreducible_iff_prime</span> </pre></div> </div> </div> </div> </section> </section> </div>
-
-
-
@@ -1,7 +1,8 @@<!DOCTYPE html> <html class="writer-html5" lang="en" > <head> <meta charset="utf-8" /> <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>7. Hierarchies — Mathematics in Lean 0.1 documentation</title> <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
-
@@ -15,6 +16,7 @@<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script> <script src="_static/jquery.js"></script> <script src="_static/underscore.js"></script> <script src="_static/_sphinx_javascript_frameworks_compat.js"></script> <script src="_static/doctools.js"></script> <script src="_static/js/theme.js"></script> <link rel="index" title="Index" href="genindex.html" />
-
@@ -83,8 +85,8 @@<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> <div itemprop="articleBody"> <div class="section" id="hierarchies"> <span id="id1"></span><h1><span class="section-number">7. </span>Hierarchies<a class="headerlink" href="#hierarchies" title="Permalink to this headline"></a></h1> <section id="hierarchies"> <span id="id1"></span><h1><span class="section-number">7. </span>Hierarchies<a class="headerlink" href="#hierarchies" title="Permalink to this heading"></a></h1> <p>We have seen in <a class="reference internal" href="C06_Structures.html#structures"><span class="std std-numref">Chapter 6</span></a> how to define the class of groups and build instances of this class, and then how to build an instance of the commutative ring class. But of course there is a hierarchy here: a
-
@@ -100,8 +102,8 @@ the following chapters and come back here for a second reading.</p>so we will used indices to distinguish our version. For instance we will have <code class="docutils literal notranslate"><span class="pre">Ring₁</span></code> as our version of <code class="docutils literal notranslate"><span class="pre">Ring</span></code>. Since we will gradually explain more powerful ways of formalizing structures, those indices will sometimes grow beyond one.</p> <div class="section" id="basics"> <span id="section-hierarchies-basics"></span><h2><span class="section-number">7.1. </span>Basics<a class="headerlink" href="#basics" title="Permalink to this headline"></a></h2> <section id="basics"> <span id="section-hierarchies-basics"></span><h2><span class="section-number">7.1. </span>Basics<a class="headerlink" href="#basics" title="Permalink to this heading"></a></h2> <p>At the very bottom of all hierarchies in Lean, we find data-carrying classes. The following class records that the given type <code class="docutils literal notranslate"><span class="pre">α</span></code> is endowed with a distinguished element called <code class="docutils literal notranslate"><span class="pre">one</span></code>. At this stage, it has no property at all.</p>
-
@@ -626,9 +628,9 @@ to incorporate a type class <code class="docutils literal notranslate"><span clathat every preorder comes with a <code class="docutils literal notranslate"><span class="pre"><₁</span></code> which has a default value built from <code class="docutils literal notranslate"><span class="pre">≤₁</span></code> and a <code class="docutils literal notranslate"><span class="pre">Prop</span></code>-valued field asserting the natural relation between those two comparison operators. -/</p> </div> <div class="section" id="morphisms"> <span id="section-hierarchies-morphisms"></span><h2><span class="section-number">7.2. </span>Morphisms<a class="headerlink" href="#morphisms" title="Permalink to this headline"></a></h2> </section> <section id="morphisms"> <span id="section-hierarchies-morphisms"></span><h2><span class="section-number">7.2. </span>Morphisms<a class="headerlink" href="#morphisms" title="Permalink to this heading"></a></h2> <p>So far in this chapter, we discussed how to create a hierarchy of mathematical structures. But defining structures is not really completed until we have morphisms. There are two main approaches here. The most obvious one is to define a predicate on functions.</p>
-
@@ -830,9 +832,9 @@ definitions below.</p><span class="o">:=</span> <span class="gr">sorry</span> </pre></div> </div> </div> <div class="section" id="sub-objects"> <span id="section-hierarchies-subobjects"></span><h2><span class="section-number">7.3. </span>Sub-objects<a class="headerlink" href="#sub-objects" title="Permalink to this headline"></a></h2> </section> <section id="sub-objects"> <span id="section-hierarchies-subobjects"></span><h2><span class="section-number">7.3. </span>Sub-objects<a class="headerlink" href="#sub-objects" title="Permalink to this heading"></a></h2> <p>After defining some algebraic structure and its morphisms, the next step is to consider sets that inherit this algebraic structure, for instance subgroups or subrings. This largely overlaps our previous topic. Indeed a set in <code class="docutils literal notranslate"><span class="pre">X</span></code> is implemented as a function from
-
@@ -968,8 +970,8 @@ the <code class="docutils literal notranslate"><span class="pre">@</span></c<span class="gr">sorry</span> </pre></div> </div> </div> </div> </section> </section> </div>
-
-
-
@@ -1,7 +1,8 @@<!DOCTYPE html> <html class="writer-html5" lang="en" > <head> <meta charset="utf-8" /> <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>8. Topology — Mathematics in Lean 0.1 documentation</title> <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
-
@@ -15,6 +16,7 @@<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script> <script src="_static/jquery.js"></script> <script src="_static/underscore.js"></script> <script src="_static/_sphinx_javascript_frameworks_compat.js"></script> <script src="_static/doctools.js"></script> <script async="async" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script> <script src="_static/js/theme.js"></script>
-
@@ -96,8 +98,8 @@<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> <div itemprop="articleBody"> <span class="target" id="topology"></span><div class="section" id="index-0"> <span id="id1"></span><h1><span class="section-number">8. </span>Topology<a class="headerlink" href="#index-0" title="Permalink to this headline"></a></h1> <span class="target" id="topology"></span><section id="index-0"> <span id="id1"></span><h1><span class="section-number">8. </span>Topology<a class="headerlink" href="#index-0" title="Permalink to this heading"></a></h1> <p>Calculus is based on the concept of a function, which is used to model quantities that depend on one another. For example, it is common to study quantities that change over time.
-
@@ -164,8 +166,8 @@ and simply note that the rest can be proved “in the same way.”Formalizing mathematics requires making the relevant notion of “sameness” fully explicit, and that is exactly what Bourbaki’s theory of filters manages to do.</p> <div class="section" id="filters"> <span id="index-1"></span><span id="id2"></span><h2><span class="section-number">8.1. </span>Filters<a class="headerlink" href="#filters" title="Permalink to this headline"></a></h2> <section id="filters"> <span id="index-1"></span><span id="id2"></span><h2><span class="section-number">8.1. </span>Filters<a class="headerlink" href="#filters" title="Permalink to this heading"></a></h2> <p>A <em>filter</em> on a type <code class="docutils literal notranslate"><span class="pre">X</span></code> is a collection of sets of <code class="docutils literal notranslate"><span class="pre">X</span></code> that satisfies three conditions that we will spell out below. The notion supports two related ideas:</p>
-
@@ -178,7 +180,7 @@ supports two related ideas:</p><li><p><code class="docutils literal notranslate"><span class="pre">(atTop</span> <span class="pre">:</span> <span class="pre">Filter</span> <span class="pre">ℕ)</span></code>, made of sets of <code class="docutils literal notranslate"><span class="pre">ℕ</span></code> containing <code class="docutils literal notranslate"><span class="pre">{n</span> <span class="pre">|</span> <span class="pre">n</span> <span class="pre">≥</span> <span class="pre">N}</span></code> for some <code class="docutils literal notranslate"><span class="pre">N</span></code></p></li> <li><p><code class="docutils literal notranslate"><span class="pre">𝓝</span> <span class="pre">x</span></code>, made of neighborhoods of <code class="docutils literal notranslate"><span class="pre">x</span></code> in a topological space</p></li> <li><p><code class="docutils literal notranslate"><span class="pre">𝓤</span> <span class="pre">X</span></code>, made of entourages of a uniform space (uniform spaces generalize metric spaces and topological groups)</p></li> <li><p><code class="docutils literal notranslate"><span class="pre">μ.a_e</span></code> , made of sets whose complement has zero measure with respect to a measure <code class="docutils literal notranslate"><span class="pre">μ</span></code>.</p></li> <li><p><code class="docutils literal notranslate"><span class="pre">μ.ae</span></code> , made of sets whose complement has zero measure with respect to a measure <code class="docutils literal notranslate"><span class="pre">μ</span></code>.</p></li> </ul> <p>The general definition is as follows: a filter <code class="docutils literal notranslate"><span class="pre">F</span> <span class="pre">:</span> <span class="pre">Filter</span> <span class="pre">X</span></code> is a collection of sets <code class="docutils literal notranslate"><span class="pre">F.sets</span> <span class="pre">:</span> <span class="pre">Set</span> <span class="pre">(Set</span> <span class="pre">X)</span></code> satisfying the following:</p>
-
@@ -352,7 +354,7 @@ and <code class="docutils literal notranslate"><span class="pre">Filter.prod</sp<span class="gr">sorry</span> </pre></div> </div> <p>The ordered type <code class="docutils literal notranslate"><span class="pre">filter</span> <span class="pre">X</span></code> is actually a <em>complete</em> lattice, <p>The ordered type <code class="docutils literal notranslate"><span class="pre">Filter</span> <span class="pre">X</span></code> is actually a <em>complete</em> lattice, which is to say, there is a bottom element, there is a top element, and every set of filters on <code class="docutils literal notranslate"><span class="pre">X</span></code> has an <code class="docutils literal notranslate"><span class="pre">Inf</span></code> and a <code class="docutils literal notranslate"><span class="pre">Sup</span></code>.</p> <p>Note that given the second property in the definition of a filter
-
@@ -366,7 +368,7 @@ definition of a filter does not prohibit <code class="docutils literal notranslabut if the empty set is in <code class="docutils literal notranslate"><span class="pre">F</span></code> then every set is in <code class="docutils literal notranslate"><span class="pre">F</span></code>, which is to say, <code class="docutils literal notranslate"><span class="pre">∀</span> <span class="pre">U</span> <span class="pre">:</span> <span class="pre">Set</span> <span class="pre">X,</span> <span class="pre">U</span> <span class="pre">∈</span> <span class="pre">F</span></code>. In this case, <code class="docutils literal notranslate"><span class="pre">F</span></code> is a rather trivial filter, which is precisely the bottom element of the complete lattice <code class="docutils literal notranslate"><span class="pre">filter</span> <span class="pre">X</span></code>. bottom element of the complete lattice <code class="docutils literal notranslate"><span class="pre">Filter</span> <span class="pre">X</span></code>. This contrasts with the definition of filters in Bourbaki, which doesn’t allow filters containing the empty set.</p> <p>Because we include the trivial filter in our definition, we sometimes need to explicitly assume
-
@@ -470,9 +472,9 @@ Given <code class="docutils literal notranslate"><span class="pre">F</span> <spa<span class="k">#check</span> <span class="n">Eventually.and</span> </pre></div> </div> <p>The second item, corresponding to <code class="docutils literal notranslate"><span class="pre">eventually.mono</span></code>, supports nice ways <p>The second item, corresponding to <code class="docutils literal notranslate"><span class="pre">Eventually.mono</span></code>, supports nice ways of using filters, especially when combined with <code class="docutils literal notranslate"><span class="pre">eventually.and</span></code>. The <code class="docutils literal notranslate"><span class="pre">filter_upwards</span></code> tactic allows us to combine them. with <code class="docutils literal notranslate"><span class="pre">Eventually.and</span></code>. The <code class="docutils literal notranslate"><span class="pre">filter_upwards</span></code> tactic allows us to combine them. Compare:</p> <div class="highlight-lean notranslate"><div class="highlight"><pre><span></span><span class="kd">example</span> <span class="o">(</span><span class="n">P</span> <span class="n">Q</span> <span class="n">R</span> <span class="o">:</span> <span class="n">ℕ</span> <span class="bp">→</span> <span class="kt">Prop</span><span class="o">)</span> <span class="o">(</span><span class="n">hP</span> <span class="o">:</span> <span class="bp">∀ᶠ</span> <span class="n">n</span> <span class="k">in</span> <span class="n">atTop</span><span class="o">,</span> <span class="n">P</span> <span class="n">n</span><span class="o">)</span> <span class="o">(</span><span class="n">hQ</span> <span class="o">:</span> <span class="bp">∀ᶠ</span> <span class="n">n</span> <span class="k">in</span> <span class="n">atTop</span><span class="o">,</span> <span class="n">Q</span> <span class="n">n</span><span class="o">)</span> <span class="o">(</span><span class="n">hR</span> <span class="o">:</span> <span class="bp">∀ᶠ</span> <span class="n">n</span> <span class="k">in</span> <span class="n">atTop</span><span class="o">,</span> <span class="n">P</span> <span class="n">n</span> <span class="bp">∧</span> <span class="n">Q</span> <span class="n">n</span> <span class="bp">→</span> <span class="n">R</span> <span class="n">n</span><span class="o">)</span> <span class="o">:</span> <span class="bp">∀ᶠ</span> <span class="n">n</span> <span class="k">in</span> <span class="n">atTop</span><span class="o">,</span> <span class="n">R</span> <span class="n">n</span> <span class="o">:=</span> <span class="kd">by</span>
-
@@ -482,18 +484,17 @@ Compare:</p><span class="kd">example</span> <span class="o">(</span><span class="n">P</span> <span class="n">Q</span> <span class="n">R</span> <span class="o">:</span> <span class="n">ℕ</span> <span class="bp">→</span> <span class="kt">Prop</span><span class="o">)</span> <span class="o">(</span><span class="n">hP</span> <span class="o">:</span> <span class="bp">∀ᶠ</span> <span class="n">n</span> <span class="k">in</span> <span class="n">atTop</span><span class="o">,</span> <span class="n">P</span> <span class="n">n</span><span class="o">)</span> <span class="o">(</span><span class="n">hQ</span> <span class="o">:</span> <span class="bp">∀ᶠ</span> <span class="n">n</span> <span class="k">in</span> <span class="n">atTop</span><span class="o">,</span> <span class="n">Q</span> <span class="n">n</span><span class="o">)</span> <span class="o">(</span><span class="n">hR</span> <span class="o">:</span> <span class="bp">∀ᶠ</span> <span class="n">n</span> <span class="k">in</span> <span class="n">atTop</span><span class="o">,</span> <span class="n">P</span> <span class="n">n</span> <span class="bp">∧</span> <span class="n">Q</span> <span class="n">n</span> <span class="bp">→</span> <span class="n">R</span> <span class="n">n</span><span class="o">)</span> <span class="o">:</span> <span class="bp">∀ᶠ</span> <span class="n">n</span> <span class="k">in</span> <span class="n">atTop</span><span class="o">,</span> <span class="n">R</span> <span class="n">n</span> <span class="o">:=</span> <span class="kd">by</span> <span class="n">filter_upwards</span> <span class="o">[</span><span class="n">hP</span><span class="o">,</span> <span class="n">hQ</span><span class="o">,</span> <span class="n">hR</span><span class="o">]</span> <span class="n">intro</span> <span class="n">n</span> <span class="n">h</span> <span class="n">h'</span> <span class="n">h''</span> <span class="n">filter_upwards</span> <span class="o">[</span><span class="n">hP</span><span class="o">,</span> <span class="n">hQ</span><span class="o">,</span> <span class="n">hR</span><span class="o">]</span> <span class="k">with</span> <span class="n">n</span> <span class="n">h</span> <span class="n">h'</span> <span class="n">h''</span> <span class="n">exact</span> <span class="n">h''</span> <span class="o">⟨</span><span class="n">h</span><span class="o">,</span> <span class="n">h'</span><span class="o">⟩</span> </pre></div> </div> <p>Readers who know about measure theory will note that the filter <code class="docutils literal notranslate"><span class="pre">μ.ae</span></code> of sets whose complement has measure zero (aka “the set consisting of almost every point”) is not very useful as the source or target of <code class="docutils literal notranslate"><span class="pre">Tendsto</span></code>, but it can be conveniently used with <code class="docutils literal notranslate"><span class="pre">eventually</span></code> to say that a property holds for almost every point.</p> used with <code class="docutils literal notranslate"><span class="pre">Eventually</span></code> to say that a property holds for almost every point.</p> <p>There is a dual version of <code class="docutils literal notranslate"><span class="pre">∀ᶠ</span> <span class="pre">x</span> <span class="pre">in</span> <span class="pre">F,</span> <span class="pre">P</span> <span class="pre">x</span></code>, which is occasionally useful: <code class="docutils literal notranslate"><span class="pre">∃ᶠ</span> <span class="pre">x</span> <span class="pre">in</span> <span class="pre">F,</span> <span class="pre">P</span> <span class="pre">x</span></code> means <code class="docutils literal notranslate"><span class="pre">{x</span> <span class="pre">|</span> <span class="pre">¬P</span> <span class="pre">x}</span> <span class="pre">∉</span> <span class="pre">F</span></code>. For example, <code class="docutils literal notranslate"><span class="pre">∃ᶠ</span> <span class="pre">n</span> <span class="pre">in</span> <span class="pre">atTop,</span> <span class="pre">P</span> <span class="pre">n</span></code> means there are arbitrarily large <code class="docutils literal notranslate"><span class="pre">n</span></code> such that <code class="docutils literal notranslate"><span class="pre">P</span> <span class="pre">n</span></code> holds. The <code class="docutils literal notranslate"><span class="pre">∃ᶠ</span></code> notation stands for <code class="docutils literal notranslate"><span class="pre">Filter.frequently</span></code>.</p> The <code class="docutils literal notranslate"><span class="pre">∃ᶠ</span></code> notation stands for <code class="docutils literal notranslate"><span class="pre">Filter.Frequently</span></code>.</p> <p>For a more sophisticated example, consider the following statement about a sequence <code class="docutils literal notranslate"><span class="pre">u</span></code>, a set <code class="docutils literal notranslate"><span class="pre">M</span></code>, and a value <code class="docutils literal notranslate"><span class="pre">x</span></code>:</p> <blockquote>
-
@@ -518,9 +519,9 @@ by definition, the assumption <code class="docutils literal notranslate"><span c<span class="gr">sorry</span> </pre></div> </div> </div> <div class="section" id="metric-spaces"> <span id="index-2"></span><span id="id3"></span><h2><span class="section-number">8.2. </span>Metric spaces<a class="headerlink" href="#metric-spaces" title="Permalink to this headline"></a></h2> </section> <section id="metric-spaces"> <span id="index-2"></span><span id="id3"></span><h2><span class="section-number">8.2. </span>Metric spaces<a class="headerlink" href="#metric-spaces" title="Permalink to this heading"></a></h2> <p>Examples in the previous section focus on sequences of real numbers. In this section we will go up a bit in generality and focus on metric spaces. A metric space is a type <code class="docutils literal notranslate"><span class="pre">X</span></code> equipped with a distance function <code class="docutils literal notranslate"><span class="pre">dist</span> <span class="pre">:</span> <span class="pre">X</span> <span class="pre">→</span> <span class="pre">X</span> <span class="pre">→</span> <span class="pre">ℝ</span></code> which is a generalization of the function <code class="docutils literal notranslate"><span class="pre">fun</span> <span class="pre">x</span> <span class="pre">y</span> <span class="pre">↦</span> <span class="pre">|x</span> <span class="pre">-</span> <span class="pre">y|</span></code> from the case where <code class="docutils literal notranslate"><span class="pre">X</span> <span class="pre">=</span> <span class="pre">ℝ</span></code>.</p>
-
@@ -538,8 +539,8 @@ the function <code class="docutils literal notranslate"><span class="pre">fun</sThey are called <code class="docutils literal notranslate"><span class="pre">EMetricSpace</span></code>, <code class="docutils literal notranslate"><span class="pre">PseudoMetricSpace</span></code> and <code class="docutils literal notranslate"><span class="pre">PseudoEMetricSpace</span></code> respectively (here “e” stands for “extended”).</p> <p>Note that our journey from <code class="docutils literal notranslate"><span class="pre">ℝ</span></code> to metric spaces jumped over the special case of normed spaces that also require linear algebra and will be explained as part of the calculus chapter.</p> <div class="section" id="convergence-and-continuity"> <h3><span class="section-number">8.2.1. </span>Convergence and continuity<a class="headerlink" href="#convergence-and-continuity" title="Permalink to this headline"></a></h3> <section id="convergence-and-continuity"> <h3><span class="section-number">8.2.1. </span>Convergence and continuity<a class="headerlink" href="#convergence-and-continuity" title="Permalink to this heading"></a></h3> <p>Using distance functions, we can already define convergent sequences and continuous functions between metric spaces. They are actually defined in a more general setting covered in the next section, but we have lemmas recasting the definition is terms of distances.</p>
-
@@ -553,7 +554,7 @@ but we have lemmas recasting the definition is terms of distances.</p><span class="n">Metric.continuous_iff</span> </pre></div> </div> <p id="index-3">A <em>lot</em> of lemmas have some continuity assumptions, no we end up proving a lot of continuity results and there <p id="index-3">A <em>lot</em> of lemmas have some continuity assumptions, so we end up proving a lot of continuity results and there is a <code class="docutils literal notranslate"><span class="pre">continuity</span></code> tactic devoted to this task. Let’s prove a continuity statement that will be needed in an exercise below. Notice that Lean knows how to treat a product of two metric spaces as a metric space, so it makes sense to consider continuous functions from <code class="docutils literal notranslate"><span class="pre">X</span> <span class="pre">×</span> <span class="pre">X</span></code> to <code class="docutils literal notranslate"><span class="pre">ℝ</span></code>.
-
@@ -626,9 +627,9 @@ and get our final proof, now bordering obfuscation.</p><span class="n">Metric.continuousAt_iff</span> </pre></div> </div> </div> <div class="section" id="balls-open-sets-and-closed-sets"> <h3><span class="section-number">8.2.2. </span>Balls, open sets and closed sets<a class="headerlink" href="#balls-open-sets-and-closed-sets" title="Permalink to this headline"></a></h3> </section> <section id="balls-open-sets-and-closed-sets"> <h3><span class="section-number">8.2.2. </span>Balls, open sets and closed sets<a class="headerlink" href="#balls-open-sets-and-closed-sets" title="Permalink to this heading"></a></h3> <p>Once we have a distance function, the most important geometric definitions are (open) balls and closed balls.</p> <div class="highlight-lean notranslate"><div class="highlight"><pre><span></span><span class="kd">variable</span> <span class="o">(</span><span class="n">r</span> <span class="o">:</span> <span class="n">ℝ</span><span class="o">)</span>
-
@@ -653,7 +654,7 @@ but we have lemmas recasting the definition is terms of balls.</p><span class="n">Metric.isOpen_iff</span> </pre></div> </div> <p>Then closed sets are sets whose complement is open. Their important property is they are closed under limits. The closure of a set is the smallest subset containing it.</p> <p>Then closed sets are sets whose complement is open. Their important property is they are closed under limits. The closure of a set is the smallest closed set containing it.</p> <div class="highlight-lean notranslate"><div class="highlight"><pre><span></span><span class="kd">example</span> <span class="o">{</span><span class="n">s</span> <span class="o">:</span> <span class="n">Set</span> <span class="n">X</span><span class="o">}</span> <span class="o">:</span> <span class="n">IsClosed</span> <span class="n">s</span> <span class="bp">↔</span> <span class="n">IsOpen</span> <span class="o">(</span><span class="n">s</span><span class="bp">ᶜ</span><span class="o">)</span> <span class="o">:=</span> <span class="n">isOpen_compl_iff.symm</span>
-
@@ -683,9 +684,9 @@ argument so we can invoke <code class="docutils literal notranslate"><span class<span class="n">Metric.nhds_basis_closedBall.mem_iff</span> </pre></div> </div> </div> <div class="section" id="compactness"> <h3><span class="section-number">8.2.3. </span>Compactness<a class="headerlink" href="#compactness" title="Permalink to this headline"></a></h3> </section> <section id="compactness"> <h3><span class="section-number">8.2.3. </span>Compactness<a class="headerlink" href="#compactness" title="Permalink to this heading"></a></h3> <p>Compactness is an important topological notion. It distinguishes subsets of a metric space that enjoy the same kind of properties as segments in reals compared to other intervals:</p> <ul class="simple">
-
@@ -720,15 +721,15 @@ are deduced from more general versions, some of which will be discussed in later<span class="n">hs.isClosed</span> </pre></div> </div> <p>We can also metric spaces which are globally compact, using an extra <code class="docutils literal notranslate"><span class="pre">Prop</span></code>-valued type class:</p> <p>We can also specify that a metric spaces is globally compact, using an extra <code class="docutils literal notranslate"><span class="pre">Prop</span></code>-valued type class:</p> <div class="highlight-lean notranslate"><div class="highlight"><pre><span></span><span class="kd">example</span> <span class="o">{</span><span class="n">X</span> <span class="o">:</span> <span class="kt">Type</span> <span class="n">_</span><span class="o">}</span> <span class="o">[</span><span class="n">MetricSpace</span> <span class="n">X</span><span class="o">]</span> <span class="o">[</span><span class="n">CompactSpace</span> <span class="n">X</span><span class="o">]</span> <span class="o">:</span> <span class="n">IsCompact</span> <span class="o">(</span><span class="n">univ</span> <span class="o">:</span> <span class="n">Set</span> <span class="n">X</span><span class="o">)</span> <span class="o">:=</span> <span class="n">isCompact_univ</span> </pre></div> </div> <p>In a compact metric space any closed set is compact, this is <code class="docutils literal notranslate"><span class="pre">IsCompact.isClosed</span></code>.</p> </div> <div class="section" id="uniformly-continuous-functions"> <h3><span class="section-number">8.2.4. </span>Uniformly continuous functions<a class="headerlink" href="#uniformly-continuous-functions" title="Permalink to this headline"></a></h3> <p>In a compact metric space any closed set is compact, this is <code class="docutils literal notranslate"><span class="pre">IsClosed.isCompact</span></code>.</p> </section> <section id="uniformly-continuous-functions"> <h3><span class="section-number">8.2.4. </span>Uniformly continuous functions<a class="headerlink" href="#uniformly-continuous-functions" title="Permalink to this heading"></a></h3> <p>We now turn to uniformity notions on metric spaces : uniformly continuous functions, Cauchy sequences and completeness. Again those are defined in a more general context but we have lemmas in the metric name space to access their elementary definitions. We start with uniform continuity.</p>
-
@@ -757,9 +758,9 @@ of the distance function on <code class="docutils literal notranslate"><span cla<span class="gr">sorry</span> </pre></div> </div> </div> <div class="section" id="completeness"> <h3><span class="section-number">8.2.5. </span>Completeness<a class="headerlink" href="#completeness" title="Permalink to this headline"></a></h3> </section> <section id="completeness"> <h3><span class="section-number">8.2.5. </span>Completeness<a class="headerlink" href="#completeness" title="Permalink to this heading"></a></h3> <p>A Cauchy sequence in a metric space is a sequence whose terms get closer and closer to each other. There are a couple of equivalent ways to state that idea. In particular converging sequences are Cauchy. The converse is true only in so-called <em>complete</em>
-
@@ -848,12 +849,12 @@ define something inductively in the middle of a proof using <code class="docutil<span class="gr">sorry</span> </pre></div> </div> </div> </div> <div class="section" id="topological-spaces"> <span id="index-4"></span><span id="id4"></span><h2><span class="section-number">8.3. </span>Topological spaces<a class="headerlink" href="#topological-spaces" title="Permalink to this headline"></a></h2> <div class="section" id="fundamentals"> <h3><span class="section-number">8.3.1. </span>Fundamentals<a class="headerlink" href="#fundamentals" title="Permalink to this headline"></a></h3> </section> </section> <section id="topological-spaces"> <span id="index-4"></span><span id="id4"></span><h2><span class="section-number">8.3. </span>Topological spaces<a class="headerlink" href="#topological-spaces" title="Permalink to this heading"></a></h2> <section id="fundamentals"> <h3><span class="section-number">8.3.1. </span>Fundamentals<a class="headerlink" href="#fundamentals" title="Permalink to this heading"></a></h3> <p>We now go up in generality and introduce topological spaces. We will review the two main ways to define topological spaces and then explain how the category of topological spaces is much better behaved than the category of metric spaces. Note that we won’t be using mathlib category theory here, only having
-
@@ -871,10 +872,10 @@ has to satisfy a number of axioms presented below (this collection is slightly r<span class="kd">example</span> <span class="o">:</span> <span class="n">IsOpen</span> <span class="o">(</span><span class="bp">∅</span> <span class="o">:</span> <span class="n">Set</span> <span class="n">X</span><span class="o">)</span> <span class="o">:=</span> <span class="n">isOpen_empty</span> <span class="kd">example</span> <span class="o">{</span><span class="n">ι</span> <span class="o">:</span> <span class="kt">Type</span> <span class="n">_</span><span class="o">}</span> <span class="o">{</span><span class="n">s</span> <span class="o">:</span> <span class="n">ι</span> <span class="bp">→</span> <span class="n">Set</span> <span class="n">X</span><span class="o">}</span> <span class="o">(</span><span class="n">hs</span> <span class="o">:</span> <span class="bp">∀</span> <span class="n">i</span><span class="o">,</span> <span class="n">IsOpen</span> <span class="bp"><|</span> <span class="n">s</span> <span class="n">i</span><span class="o">)</span> <span class="o">:</span> <span class="n">IsOpen</span> <span class="o">(</span><span class="bp">⋃</span> <span class="n">i</span><span class="o">,</span> <span class="n">s</span> <span class="n">i</span><span class="o">)</span> <span class="o">:=</span> <span class="kd">example</span> <span class="o">{</span><span class="n">ι</span> <span class="o">:</span> <span class="kt">Type</span> <span class="n">_</span><span class="o">}</span> <span class="o">{</span><span class="n">s</span> <span class="o">:</span> <span class="n">ι</span> <span class="bp">→</span> <span class="n">Set</span> <span class="n">X</span><span class="o">}</span> <span class="o">(</span><span class="n">hs</span> <span class="o">:</span> <span class="bp">∀</span> <span class="n">i</span><span class="o">,</span> <span class="n">IsOpen</span> <span class="o">(</span><span class="n">s</span> <span class="n">i</span><span class="o">))</span> <span class="o">:</span> <span class="n">IsOpen</span> <span class="o">(</span><span class="bp">⋃</span> <span class="n">i</span><span class="o">,</span> <span class="n">s</span> <span class="n">i</span><span class="o">)</span> <span class="o">:=</span> <span class="n">isOpen_iUnion</span> <span class="n">hs</span> <span class="kd">example</span> <span class="o">{</span><span class="n">ι</span> <span class="o">:</span> <span class="kt">Type</span> <span class="n">_</span><span class="o">}</span> <span class="o">[</span><span class="n">Fintype</span> <span class="n">ι</span><span class="o">]</span> <span class="o">{</span><span class="n">s</span> <span class="o">:</span> <span class="n">ι</span> <span class="bp">→</span> <span class="n">Set</span> <span class="n">X</span><span class="o">}</span> <span class="o">(</span><span class="n">hs</span> <span class="o">:</span> <span class="bp">∀</span> <span class="n">i</span><span class="o">,</span> <span class="n">IsOpen</span> <span class="bp"><|</span> <span class="n">s</span> <span class="n">i</span><span class="o">)</span> <span class="o">:</span> <span class="kd">example</span> <span class="o">{</span><span class="n">ι</span> <span class="o">:</span> <span class="kt">Type</span> <span class="n">_</span><span class="o">}</span> <span class="o">[</span><span class="n">Fintype</span> <span class="n">ι</span><span class="o">]</span> <span class="o">{</span><span class="n">s</span> <span class="o">:</span> <span class="n">ι</span> <span class="bp">→</span> <span class="n">Set</span> <span class="n">X</span><span class="o">}</span> <span class="o">(</span><span class="n">hs</span> <span class="o">:</span> <span class="bp">∀</span> <span class="n">i</span><span class="o">,</span> <span class="n">IsOpen</span> <span class="o">(</span><span class="n">s</span> <span class="n">i</span><span class="o">))</span> <span class="o">:</span> <span class="n">IsOpen</span> <span class="o">(</span><span class="bp">⋂</span> <span class="n">i</span><span class="o">,</span> <span class="n">s</span> <span class="n">i</span><span class="o">)</span> <span class="o">:=</span> <span class="n">isOpen_iInter</span> <span class="n">hs</span> </pre></div>
-
@@ -892,7 +893,7 @@ enough information to talk about continuous functions: two topological structurethe same if and only if they have the same continuous functions (indeed the identity function will be continuous in both direction if and only if the two structures have the same open sets).</p> <p>However as soon as we move on to continuity at a point we see the limitations of the approach based on open sets. In mathlib it is much more frequent to think of topological spaces as types equipped on open sets. In mathlib we frequently think of topological spaces as types equipped with a neighborhood filter <code class="docutils literal notranslate"><span class="pre">𝓝</span> <span class="pre">x</span></code> attached to each point <code class="docutils literal notranslate"><span class="pre">x</span></code> (the corresponding function <code class="docutils literal notranslate"><span class="pre">X</span> <span class="pre">→</span> <span class="pre">Filter</span> <span class="pre">X</span></code> satisfies certain conditions explained further down). Remember from the filters section that these gadget play two related roles. First <code class="docutils literal notranslate"><span class="pre">𝓝</span> <span class="pre">x</span></code> is seen as the generalized set of points of <code class="docutils literal notranslate"><span class="pre">X</span></code>
-
@@ -929,7 +930,7 @@ Another way to say it is that if a predicate holds for points close to <code cla<span class="n">pure_le_nhds</span> <span class="n">x</span> <span class="kd">example</span> <span class="o">(</span><span class="n">x</span> <span class="o">:</span> <span class="n">X</span><span class="o">)</span> <span class="o">(</span><span class="n">P</span> <span class="o">:</span> <span class="n">X</span> <span class="bp">→</span> <span class="kt">Prop</span><span class="o">)</span> <span class="o">(</span><span class="n">h</span> <span class="o">:</span> <span class="bp">∀ᶠ</span> <span class="n">y</span> <span class="k">in</span> <span class="bp">𝓝</span> <span class="n">x</span><span class="o">,</span> <span class="n">P</span> <span class="n">y</span><span class="o">)</span> <span class="o">:</span> <span class="n">P</span> <span class="n">x</span> <span class="o">:=</span> <span class="n">pure_le_nhds</span> <span class="n">x</span> <span class="n">h</span> <span class="n">h.self_of_nhds</span> </pre></div> </div> <p>Then a more subtle requirement is that, for any predicate <code class="docutils literal notranslate"><span class="pre">P</span> <span class="pre">:</span> <span class="pre">X</span> <span class="pre">→</span> <span class="pre">Prop</span></code> and any <code class="docutils literal notranslate"><span class="pre">x</span></code>, if <code class="docutils literal notranslate"><span class="pre">P</span> <span class="pre">y</span></code> holds for <code class="docutils literal notranslate"><span class="pre">y</span></code> close
-
@@ -939,9 +940,9 @@ to <code class="docutils literal notranslate"><span class="pre">x</span></code></pre></div> </div> <p>Those two results characterize the functions <code class="docutils literal notranslate"><span class="pre">X</span> <span class="pre">→</span> <span class="pre">Filter</span> <span class="pre">X</span></code> that are neighborhood functions for a topological space structure on <code class="docutils literal notranslate"><span class="pre">X</span></code>. There is a still a function <code class="docutils literal notranslate"><span class="pre">topological_space.mk_of_nhds</span> <span class="pre">:</span> <span class="pre">(X</span> <span class="pre">→</span> <span class="pre">Filter</span> <span class="pre">X)</span> <span class="pre">→</span> <span class="pre">topological_space</span> <span class="pre">X</span></code> structure on <code class="docutils literal notranslate"><span class="pre">X</span></code>. There is a still a function <code class="docutils literal notranslate"><span class="pre">TopologicalSpace.mkOfNhds</span> <span class="pre">:</span> <span class="pre">(X</span> <span class="pre">→</span> <span class="pre">Filter</span> <span class="pre">X)</span> <span class="pre">→</span> <span class="pre">TopologicalSpace</span> <span class="pre">X</span></code> but it will give back its input as a neighborhood function only if it satisfies the above two constraints. More precisely we have a lemma <code class="docutils literal notranslate"><span class="pre">topological_space.nhds_mk_of_nhds</span></code> saying that in a different way and our More precisely we have a lemma <code class="docutils literal notranslate"><span class="pre">TopologicalSpace.nhds_mkOfNhds</span></code> saying that in a different way and our next exercise deduces this different way from how we stated it above.</p> <div class="highlight-lean notranslate"><div class="highlight"><pre><span></span><span class="kd">example</span> <span class="o">{</span><span class="n">α</span> <span class="o">:</span> <span class="kt">Type</span> <span class="n">_</span><span class="o">}</span> <span class="o">(</span><span class="n">n</span> <span class="o">:</span> <span class="n">α</span> <span class="bp">→</span> <span class="n">Filter</span> <span class="n">α</span><span class="o">)</span> <span class="o">(</span><span class="n">H₀</span> <span class="o">:</span> <span class="bp">∀</span> <span class="n">a</span><span class="o">,</span> <span class="n">pure</span> <span class="n">a</span> <span class="bp">≤</span> <span class="n">n</span> <span class="n">a</span><span class="o">)</span> <span class="o">(</span><span class="n">H</span> <span class="o">:</span> <span class="bp">∀</span> <span class="n">a</span> <span class="o">:</span> <span class="n">α</span><span class="o">,</span> <span class="bp">∀</span> <span class="n">p</span> <span class="o">:</span> <span class="n">α</span> <span class="bp">→</span> <span class="kt">Prop</span><span class="o">,</span> <span class="o">(</span><span class="bp">∀ᶠ</span> <span class="n">x</span> <span class="k">in</span> <span class="n">n</span> <span class="n">a</span><span class="o">,</span> <span class="n">p</span> <span class="n">x</span><span class="o">)</span> <span class="bp">→</span> <span class="bp">∀ᶠ</span> <span class="n">y</span> <span class="k">in</span> <span class="n">n</span> <span class="n">a</span><span class="o">,</span> <span class="bp">∀ᶠ</span> <span class="n">x</span> <span class="k">in</span> <span class="n">n</span> <span class="n">y</span><span class="o">,</span> <span class="n">p</span> <span class="n">x</span><span class="o">)</span> <span class="o">:</span>
-
@@ -949,10 +950,10 @@ next exercise deduces this different way from how we stated it above.</p><span class="gr">sorry</span> </pre></div> </div> <p>Note that <code class="docutils literal notranslate"><span class="pre">topological_space.mk_of_nhds</span></code> is not so frequently used, but it still good to know in what <p>Note that <code class="docutils literal notranslate"><span class="pre">TopologicalSpace.mkOfNhds</span></code> is not so frequently used, but it still good to know in what precise sense the neighborhood filters is all there is in a topological space structure.</p> <p>The next thing to know in order to efficiently use topological spaces in mathlib is that we use a lot of formal properties of <code class="docutils literal notranslate"><span class="pre">topological_space</span> <span class="pre">:</span> <span class="pre">Type</span> <span class="pre">u</span> <span class="pre">→</span> <span class="pre">Type</span> <span class="pre">u</span></code>. From a purely mathematical point of view, of formal properties of <code class="docutils literal notranslate"><span class="pre">TopologicalSpace</span> <span class="pre">:</span> <span class="pre">Type</span> <span class="pre">u</span> <span class="pre">→</span> <span class="pre">Type</span> <span class="pre">u</span></code>. From a purely mathematical point of view, those formal properties are a very clean way to explain how topological spaces solve issues that metric spaces have. From this point of view, the issues solved by topological spaces is that metric spaces enjoy very little functoriality, and have very bad categorical properties in general. This comes on top of the fact
-
@@ -983,14 +984,15 @@ push or pull topologies from one side to the other. Those two operations form a</div> <p>Those operations are compactible with composition of functions. As usual, pushing forward is covariant and pulling back is contravariant, see <code class="docutils literal notranslate"><span class="pre">coinduced_compose</span></code> and <code class="docutils literal notranslate"><span class="pre">induced_compose</span></code>. On paper we will use notations <span class="math notranslate nohighlight">\(f_*T\)</span> for <code class="docutils literal notranslate"><span class="pre">topological_space.coinduced</span> <span class="pre">f</span> <span class="pre">T</span></code> and <span class="math notranslate nohighlight">\(f^*T\)</span> for <code class="docutils literal notranslate"><span class="pre">topological_space.induced</span> <span class="pre">f</span> <span class="pre">T</span></code>.</p> <p>Then the next big piece is a complete lattice structure on <code class="docutils literal notranslate"><span class="pre">topological_structure</span> <span class="pre">X</span></code> On paper we will use notations <span class="math notranslate nohighlight">\(f_*T\)</span> for <code class="docutils literal notranslate"><span class="pre">TopologicalSpace.coinduced</span> <span class="pre">f</span> <span class="pre">T</span></code> and <span class="math notranslate nohighlight">\(f^*T\)</span> for <code class="docutils literal notranslate"><span class="pre">TopologicalSpace.induced</span> <span class="pre">f</span> <span class="pre">T</span></code>.</p> <p>Then the next big piece is a complete lattice structure on <code class="docutils literal notranslate"><span class="pre">TopologicalSpace</span> <span class="pre">X</span></code> for any given structure. If you think of topologies are being primarily the data of open sets then you expect the order relation on <code class="docutils literal notranslate"><span class="pre">topological_structure</span> <span class="pre">X</span></code> to come from <code class="docutils literal notranslate"><span class="pre">Set</span> <span class="pre">(Set</span> <span class="pre">X)</span></code>, ie you expect <code class="docutils literal notranslate"><span class="pre">t</span> <span class="pre">≤</span> <span class="pre">t'</span></code> the order relation on <code class="docutils literal notranslate"><span class="pre">TopologicalSpace</span> <span class="pre">X</span></code> to come from <code class="docutils literal notranslate"><span class="pre">Set</span> <span class="pre">(Set</span> <span class="pre">X)</span></code>, ie you expect <code class="docutils literal notranslate"><span class="pre">t</span> <span class="pre">≤</span> <span class="pre">t'</span></code> if a set <code class="docutils literal notranslate"><span class="pre">u</span></code> is open for <code class="docutils literal notranslate"><span class="pre">t'</span></code> as soon as it is open for <code class="docutils literal notranslate"><span class="pre">t</span></code>. However we already know that mathlib focuses on neighborhoods more than open sets so, for any <code class="docutils literal notranslate"><span class="pre">x</span> <span class="pre">:</span> <span class="pre">X</span></code> we want <code class="docutils literal notranslate"><span class="pre">fun</span> <span class="pre">T</span> <span class="pre">:</span> <span class="pre">topological_space</span> <span class="pre">X</span> <span class="pre">↦</span> <span class="pre">@nhds</span> <span class="pre">X</span> <span class="pre">T</span> <span class="pre">x</span></code> to be order preserving. And we know the order relation on <code class="docutils literal notranslate"><span class="pre">filter</span> <span class="pre">X</span></code> is designed to ensure an order on neighborhoods more than open sets so, for any <code class="docutils literal notranslate"><span class="pre">x</span> <span class="pre">:</span> <span class="pre">X</span></code> we want the map from topological spaces to neighborhoods <code class="docutils literal notranslate"><span class="pre">fun</span> <span class="pre">T</span> <span class="pre">:</span> <span class="pre">TopologicalSpace</span> <span class="pre">X</span> <span class="pre">↦</span> <span class="pre">@nhds</span> <span class="pre">X</span> <span class="pre">T</span> <span class="pre">x</span></code> to be order preserving. And we know the order relation on <code class="docutils literal notranslate"><span class="pre">Filter</span> <span class="pre">X</span></code> is designed to ensure an order preserving <code class="docutils literal notranslate"><span class="pre">principal</span> <span class="pre">:</span> <span class="pre">Set</span> <span class="pre">X</span> <span class="pre">→</span> <span class="pre">Filter</span> <span class="pre">X</span></code>, allowing to see filters as generalized sets. So the order relation we do use on <code class="docutils literal notranslate"><span class="pre">topological_structure</span> <span class="pre">X</span></code> is opposite to the one coming from <code class="docutils literal notranslate"><span class="pre">Set</span> <span class="pre">(Set</span> <span class="pre">X)</span></code>.</p> <div class="highlight-lean notranslate"><div class="highlight"><pre><span></span><span class="kd">example</span> <span class="o">{</span><span class="n">T</span> <span class="n">T'</span> <span class="o">:</span> <span class="n">TopologicalSpace</span> <span class="n">X</span><span class="o">}</span> <span class="o">:</span> <span class="n">T</span> <span class="bp">≤</span> <span class="n">T'</span> <span class="bp">↔</span> <span class="bp">∀</span> <span class="n">s</span><span class="o">,</span> <span class="n">T'.IsOpen</span> <span class="n">s</span> <span class="bp">→</span> <span class="n">T.IsOpen</span> <span class="n">s</span> <span class="o">:=</span>
-
@@ -1019,11 +1021,11 @@ a function <span class="math notranslate nohighlight">\(g : Y → Z\)</span></pre></div> </div> <p>So we already get quotient topologies (using the projection map as <code class="docutils literal notranslate"><span class="pre">f</span></code>). This wasn’t using that <code class="docutils literal notranslate"><span class="pre">topological_space</span> <span class="pre">X</span></code> is a complete lattice for all <code class="docutils literal notranslate"><span class="pre">X</span></code>. Let’s now see how all this structure <code class="docutils literal notranslate"><span class="pre">TopologicalSpace</span> <span class="pre">X</span></code> is a complete lattice for all <code class="docutils literal notranslate"><span class="pre">X</span></code>. Let’s now see how all this structure proves the existence of the product topology by abstract non-sense. We considered the case of <code class="docutils literal notranslate"><span class="pre">ℝ</span> <span class="pre">→</span> <span class="pre">ℝ</span></code> above, but let’s now consider the general case of <code class="docutils literal notranslate"><span class="pre">Π</span> <span class="pre">i,</span> <span class="pre">X</span> <span class="pre">i</span></code> for some <code class="docutils literal notranslate"><span class="pre">ι</span> <span class="pre">:</span> <span class="pre">Type*</span></code> and <code class="docutils literal notranslate"><span class="pre">X</span> <span class="pre">:</span> <span class="pre">ι</span> <span class="pre">→</span> <span class="pre">Type*</span></code>. We want, for any topological space <code class="docutils literal notranslate"><span class="pre">Z</span></code> and any function <code class="docutils literal notranslate"><span class="pre">f</span> <span class="pre">:</span> <span class="pre">Z</span> <span class="pre">→</span> <span class="pre">Π</span> <span class="pre">i,</span> <span class="pre">X</span> <span class="pre">i</span></code>, that <code class="docutils literal notranslate"><span class="pre">f</span></code> is continuous if and only if <code class="docutils literal notranslate"><span class="pre">(fun</span> <span class="pre">x</span> <span class="pre">↦</span> <span class="pre">x</span> <span class="pre">i)</span> <span class="pre">∘</span> <span class="pre">f</span></code> is continuous. <code class="docutils literal notranslate"><span class="pre">f</span> <span class="pre">:</span> <span class="pre">Z</span> <span class="pre">→</span> <span class="pre">Π</span> <span class="pre">i,</span> <span class="pre">X</span> <span class="pre">i</span></code>, that <code class="docutils literal notranslate"><span class="pre">f</span></code> is continuous if and only if <code class="docutils literal notranslate"><span class="pre">(fun</span> <span class="pre">x</span> <span class="pre">↦</span> <span class="pre">x</span> <span class="pre">i)</span> <span class="pre">∘</span> <span class="pre">f</span></code> is continuous for all <code class="docutils literal notranslate"><span class="pre">i</span></code>. Let us explore that constraint “on paper” using notation <span class="math notranslate nohighlight">\(p_i\)</span> for the projection <code class="docutils literal notranslate"><span class="pre">(fun</span> <span class="pre">(x</span> <span class="pre">:</span> <span class="pre">Π</span> <span class="pre">i,</span> <span class="pre">X</span> <span class="pre">i)</span> <span class="pre">↦</span> <span class="pre">x</span> <span class="pre">i)</span></code>:</p> <div class="math notranslate nohighlight">
-
@@ -1032,7 +1034,7 @@ Let us explore that constraint “on paper” using notation <span class&⇔ ∀ i, f_* T_Z ≤ (p_i)^*T_{X_i}\\ &⇔ f_* T_Z ≤ \inf \left[(p_i)^*T_{X_i}\right]\end{split}\]</div> <p>So we see that what is the topology we want on <code class="docutils literal notranslate"><span class="pre">Π</span> <span class="pre">i,</span> <span class="pre">X</span> <span class="pre">i</span></code>:</p> <div class="highlight-lean notranslate"><div class="highlight"><pre><span></span><span class="kd">example</span> <span class="o">(</span><span class="n">ι</span> <span class="o">:</span> <span class="kt">Type</span> <span class="n">_</span><span class="o">)</span> <span class="o">(</span><span class="n">X</span> <span class="o">:</span> <span class="n">ι</span> <span class="bp">→</span> <span class="kt">Type</span> <span class="n">_</span><span class="o">)</span> <span class="o">(</span><span class="n">T_X</span> <span class="o">:</span> <span class="bp">∀</span> <span class="n">i</span><span class="o">,</span> <span class="n">TopologicalSpace</span> <span class="bp"><|</span> <span class="n">X</span> <span class="n">i</span><span class="o">)</span> <span class="o">:</span> <div class="highlight-lean notranslate"><div class="highlight"><pre><span></span><span class="kd">example</span> <span class="o">(</span><span class="n">ι</span> <span class="o">:</span> <span class="kt">Type</span> <span class="n">_</span><span class="o">)</span> <span class="o">(</span><span class="n">X</span> <span class="o">:</span> <span class="n">ι</span> <span class="bp">→</span> <span class="kt">Type</span> <span class="n">_</span><span class="o">)</span> <span class="o">(</span><span class="n">T_X</span> <span class="o">:</span> <span class="bp">∀</span> <span class="n">i</span><span class="o">,</span> <span class="n">TopologicalSpace</span> <span class="o">(</span><span class="n">X</span> <span class="n">i</span><span class="o">))</span> <span class="o">:</span> <span class="o">(</span><span class="k">Pi</span><span class="bp">.</span><span class="n">topologicalSpace</span> <span class="o">:</span> <span class="n">TopologicalSpace</span> <span class="o">(</span><span class="bp">∀</span> <span class="n">i</span><span class="o">,</span> <span class="n">X</span> <span class="n">i</span><span class="o">))</span> <span class="bp">=</span> <span class="bp">⨅</span> <span class="n">i</span><span class="o">,</span> <span class="n">TopologicalSpace.induced</span> <span class="o">(</span><span class="k">fun</span> <span class="n">x</span> <span class="bp">↦</span> <span class="n">x</span> <span class="n">i</span><span class="o">)</span> <span class="o">(</span><span class="n">T_X</span> <span class="n">i</span><span class="o">)</span> <span class="o">:=</span> <span class="n">rfl</span>
-
@@ -1040,9 +1042,9 @@ Let us explore that constraint “on paper” using notation <span class</div> <p>This ends our tour of how mathlib thinks that topological spaces fix defects of the theory of metric spaces by being a more functorial theory and having a complete lattice structure for any fixed type.</p> </div> <div class="section" id="separation-and-countability"> <h3><span class="section-number">8.3.2. </span>Separation and countability<a class="headerlink" href="#separation-and-countability" title="Permalink to this headline"></a></h3> </section> <section id="separation-and-countability"> <h3><span class="section-number">8.3.2. </span>Separation and countability<a class="headerlink" href="#separation-and-countability" title="Permalink to this heading"></a></h3> <p>We saw that the category of topological spaces have very nice properties. The price to pay for this is existence of rather pathological topological spaces. There are a number of assumptions you can make on a topological space to ensure its behavior
-
@@ -1088,32 +1090,31 @@ The assumption “tends to <span class="math notranslate nohighlight">\(x\)<</pre></div> </div> <p>Let’s now turn to the main proof of the extension by continuity theorem.</p> <p>When Lean needs a topology on <code class="docutils literal notranslate"><span class="pre">↥A</span></code> it will use the induced topology, thanks to the instance <code class="docutils literal notranslate"><span class="pre">subtype.topological_space</span></code>. This all happens automatically. The only relevant lemma is <p>When Lean needs a topology on <code class="docutils literal notranslate"><span class="pre">↥A</span></code> it will automatically use the induced topology. The only relevant lemma is <code class="docutils literal notranslate"><span class="pre">nhds_induced</span> <span class="pre">(↑)</span> <span class="pre">:</span> <span class="pre">∀</span> <span class="pre">a</span> <span class="pre">:</span> <span class="pre">↥A,</span> <span class="pre">𝓝</span> <span class="pre">a</span> <span class="pre">=</span> <span class="pre">comap</span> <span class="pre">(↑)</span> <span class="pre">(𝓝</span> <span class="pre">↑a)</span></code> (this is actually a general lemma about induced topologies).</p> <p>The proof outline is:</p> <p>The main assumption and the axiom of choice give a function <code class="docutils literal notranslate"><span class="pre">φ</span></code> such that <code class="docutils literal notranslate"><span class="pre">∀</span> <span class="pre">x,</span> <span class="pre">Tendsto</span> <span class="pre">f</span> <span class="pre">(comap</span> <span class="pre">(↑)</span> <span class="pre">$</span> <span class="pre">𝓝</span> <span class="pre">x)</span> <span class="pre">(𝓝</span> <span class="pre">(φ</span> <span class="pre">x))</span></code> <code class="docutils literal notranslate"><span class="pre">∀</span> <span class="pre">x,</span> <span class="pre">Tendsto</span> <span class="pre">f</span> <span class="pre">(comap</span> <span class="pre">(↑)</span> <span class="pre">(𝓝</span> <span class="pre">x))</span> <span class="pre">(𝓝</span> <span class="pre">(φ</span> <span class="pre">x))</span></code> (because <code class="docutils literal notranslate"><span class="pre">Y</span></code> is Hausdorff, <code class="docutils literal notranslate"><span class="pre">φ</span></code> is entirely determined, but we won’t need that until we try to prove that <code class="docutils literal notranslate"><span class="pre">φ</span></code> indeed extends <code class="docutils literal notranslate"><span class="pre">f</span></code>).</p> <p>Let’s first prove <code class="docutils literal notranslate"><span class="pre">φ</span></code> is continuous. Fix any <code class="docutils literal notranslate"><span class="pre">x</span> <span class="pre">:</span> <span class="pre">X</span></code>. Since <code class="docutils literal notranslate"><span class="pre">Y</span></code> is regular, it suffices to check that for every <em>closed</em> neighborhood <code class="docutils literal notranslate"><span class="pre">V'</span></code> of <code class="docutils literal notranslate"><span class="pre">φ</span> <span class="pre">x</span></code>, <code class="docutils literal notranslate"><span class="pre">φ</span> <span class="pre">⁻¹'</span> <span class="pre">V'</span> <span class="pre">∈</span> <span class="pre">𝓝</span> <span class="pre">x</span></code>. The limit assumption gives (through the auxiliary lemma above) some <code class="docutils literal notranslate"><span class="pre">V</span> <span class="pre">∈</span> <span class="pre">𝓝</span> <span class="pre">x</span></code> such <code class="docutils literal notranslate"><span class="pre">is_open</span> <span class="pre">V</span> <span class="pre">∧</span> <span class="pre">(↑)</span> <span class="pre">⁻¹'</span> <span class="pre">V</span> <span class="pre">⊆</span> <span class="pre">f</span> <span class="pre">⁻¹'</span> <span class="pre">V'</span></code>. some <code class="docutils literal notranslate"><span class="pre">V</span> <span class="pre">∈</span> <span class="pre">𝓝</span> <span class="pre">x</span></code> such <code class="docutils literal notranslate"><span class="pre">IsOpen</span> <span class="pre">V</span> <span class="pre">∧</span> <span class="pre">(↑)</span> <span class="pre">⁻¹'</span> <span class="pre">V</span> <span class="pre">⊆</span> <span class="pre">f</span> <span class="pre">⁻¹'</span> <span class="pre">V'</span></code>. Since <code class="docutils literal notranslate"><span class="pre">V</span> <span class="pre">∈</span> <span class="pre">𝓝</span> <span class="pre">x</span></code>, it suffices to prove <code class="docutils literal notranslate"><span class="pre">V</span> <span class="pre">⊆</span> <span class="pre">φ</span> <span class="pre">⁻¹'</span> <span class="pre">V'</span></code>, ie <code class="docutils literal notranslate"><span class="pre">∀</span> <span class="pre">y</span> <span class="pre">∈</span> <span class="pre">V,</span> <span class="pre">φ</span> <span class="pre">y</span> <span class="pre">∈</span> <span class="pre">V'</span></code>. Let’s fix <code class="docutils literal notranslate"><span class="pre">y</span></code> in <code class="docutils literal notranslate"><span class="pre">V</span></code>. Because <code class="docutils literal notranslate"><span class="pre">V</span></code> is <em>open</em>, it is a neighborhood of <code class="docutils literal notranslate"><span class="pre">y</span></code>. In particular <code class="docutils literal notranslate"><span class="pre">(↑)</span> <span class="pre">⁻¹'</span> <span class="pre">V</span> <span class="pre">∈</span> <span class="pre">comap</span> <span class="pre">(↑)</span> <span class="pre">(𝓝</span> <span class="pre">y)</span></code> and a fortiori <code class="docutils literal notranslate"><span class="pre">f</span> <span class="pre">⁻¹'</span> <span class="pre">V'</span> <span class="pre">∈</span> <span class="pre">comap</span> <span class="pre">(↑)</span> <span class="pre">(𝓝</span> <span class="pre">y)</span></code>. In addition <code class="docutils literal notranslate"><span class="pre">comap</span> <span class="pre">(↑)$</span> <span class="pre">𝓝</span> <span class="pre">y</span> <span class="pre">≠</span> <span class="pre">⊥</span></code> because <code class="docutils literal notranslate"><span class="pre">A</span></code> is dense. Because we know <code class="docutils literal notranslate"><span class="pre">Tendsto</span> <span class="pre">f</span> <span class="pre">(comap</span> <span class="pre">(↑)</span> <span class="pre">$</span> <span class="pre">𝓝</span> <span class="pre">y)</span> <span class="pre">(𝓝</span> <span class="pre">(φ</span> <span class="pre">y))</span></code> this implies In addition <code class="docutils literal notranslate"><span class="pre">comap</span> <span class="pre">(↑)</span> <span class="pre">(𝓝</span> <span class="pre">y)</span> <span class="pre">≠</span> <span class="pre">⊥</span></code> because <code class="docutils literal notranslate"><span class="pre">A</span></code> is dense. Because we know <code class="docutils literal notranslate"><span class="pre">Tendsto</span> <span class="pre">f</span> <span class="pre">(comap</span> <span class="pre">(↑)</span> <span class="pre">(𝓝</span> <span class="pre">y))</span> <span class="pre">(𝓝</span> <span class="pre">(φ</span> <span class="pre">y))</span></code> this implies <code class="docutils literal notranslate"><span class="pre">φ</span> <span class="pre">y</span> <span class="pre">∈</span> <span class="pre">closure</span> <span class="pre">V'</span></code> and, since <code class="docutils literal notranslate"><span class="pre">V'</span></code> is closed, we have proved <code class="docutils literal notranslate"><span class="pre">φ</span> <span class="pre">y</span> <span class="pre">∈</span> <span class="pre">V'</span></code>.</p> <p>It remains to prove that <code class="docutils literal notranslate"><span class="pre">φ</span></code> extends <code class="docutils literal notranslate"><span class="pre">f</span></code>. This is were continuity of <code class="docutils literal notranslate"><span class="pre">f</span></code> enters the discussion, together with the fact that <code class="docutils literal notranslate"><span class="pre">Y</span></code> is Hausdorff.</p> <div class="highlight-lean notranslate"><div class="highlight"><pre><span></span><span class="kd">example</span> <span class="o">[</span><span class="n">TopologicalSpace</span> <span class="n">X</span><span class="o">]</span> <span class="o">[</span><span class="n">TopologicalSpace</span> <span class="n">Y</span><span class="o">]</span> <span class="o">[</span><span class="n">RegularSpace</span> <span class="n">Y</span><span class="o">]</span> <span class="o">{</span><span class="n">A</span> <span class="o">:</span> <span class="n">Set</span> <span class="n">X</span><span class="o">}</span> <span class="o">(</span><span class="n">hA</span> <span class="o">:</span> <span class="bp">∀</span> <span class="n">x</span><span class="o">,</span> <span class="n">x</span> <span class="bp">∈</span> <span class="n">closure</span> <span class="n">A</span><span class="o">)</span> <span class="o">{</span><span class="n">f</span> <span class="o">:</span> <span class="n">A</span> <span class="bp">→</span> <span class="n">Y</span><span class="o">}</span> <span class="o">(</span><span class="n">f_cont</span> <span class="o">:</span> <span class="n">Continuous</span> <span class="n">f</span><span class="o">)</span> <span class="o">(</span><span class="n">hf</span> <span class="o">:</span> <span class="bp">∀</span> <span class="n">x</span> <span class="o">:</span> <span class="n">X</span><span class="o">,</span> <span class="bp">∃</span> <span class="n">c</span> <span class="o">:</span> <span class="n">Y</span><span class="o">,</span> <span class="n">Tendsto</span> <span class="n">f</span> <span class="o">(</span><span class="n">comap</span> <span class="o">(</span><span class="bp">↑</span><span class="o">)</span> <span class="bp"><|</span> <span class="bp">𝓝</span> <span class="n">x</span><span class="o">)</span> <span class="bp"><|</span> <span class="bp">𝓝</span> <span class="n">c</span><span class="o">)</span> <span class="o">:</span> <span class="o">(</span><span class="n">hf</span> <span class="o">:</span> <span class="bp">∀</span> <span class="n">x</span> <span class="o">:</span> <span class="n">X</span><span class="o">,</span> <span class="bp">∃</span> <span class="n">c</span> <span class="o">:</span> <span class="n">Y</span><span class="o">,</span> <span class="n">Tendsto</span> <span class="n">f</span> <span class="o">(</span><span class="n">comap</span> <span class="o">(</span><span class="bp">↑</span><span class="o">)</span> <span class="o">(</span><span class="bp">𝓝</span> <span class="n">x</span><span class="o">))</span> <span class="o">(</span><span class="bp">𝓝</span> <span class="n">c</span><span class="o">))</span> <span class="o">:</span> <span class="bp">∃</span> <span class="n">φ</span> <span class="o">:</span> <span class="n">X</span> <span class="bp">→</span> <span class="n">Y</span><span class="o">,</span> <span class="n">Continuous</span> <span class="n">φ</span> <span class="bp">∧</span> <span class="bp">∀</span> <span class="n">a</span> <span class="o">:</span> <span class="n">A</span><span class="o">,</span> <span class="n">φ</span> <span class="n">a</span> <span class="bp">=</span> <span class="n">f</span> <span class="n">a</span> <span class="o">:=</span> <span class="gr">sorry</span>
-
@@ -1130,9 +1131,9 @@ of sets can be understood using sequences.</p><span class="n">mem_closure_iff_seq_limit</span> </pre></div> </div> </div> <div class="section" id="id5"> <h3><span class="section-number">8.3.3. </span>Compactness<a class="headerlink" href="#id5" title="Permalink to this headline"></a></h3> </section> <section id="id5"> <h3><span class="section-number">8.3.3. </span>Compactness<a class="headerlink" href="#id5" title="Permalink to this heading"></a></h3> <p>Let us now discuss how compactness is defined for topological spaces. As usual there are several ways to think about it and mathlib goes for the filter version.</p> <p>We first need to define cluster points of filters. Given a filter <code class="docutils literal notranslate"><span class="pre">F</span></code> on a topological space <code class="docutils literal notranslate"><span class="pre">X</span></code>,
-
@@ -1150,9 +1151,9 @@ ie such that <code class="docutils literal notranslate"><span class="pre">F</spa<span class="n">Iff.rfl</span> </pre></div> </div> <p>For instance if <code class="docutils literal notranslate"><span class="pre">F</span></code> is <code class="docutils literal notranslate"><span class="pre">map</span> <span class="pre">u</span> <span class="pre">at_top</span></code>, the image under <code class="docutils literal notranslate"><span class="pre">u</span> <span class="pre">:</span> <span class="pre">ℕ</span> <span class="pre">→</span> <span class="pre">X</span></code> of <code class="docutils literal notranslate"><span class="pre">at_top</span></code>, the generalized set <p>For instance if <code class="docutils literal notranslate"><span class="pre">F</span></code> is <code class="docutils literal notranslate"><span class="pre">map</span> <span class="pre">u</span> <span class="pre">atTop</span></code>, the image under <code class="docutils literal notranslate"><span class="pre">u</span> <span class="pre">:</span> <span class="pre">ℕ</span> <span class="pre">→</span> <span class="pre">X</span></code> of <code class="docutils literal notranslate"><span class="pre">atTop</span></code>, the generalized set of very large natural numbers, then the assumption <code class="docutils literal notranslate"><span class="pre">F</span> <span class="pre">≤</span> <span class="pre">𝓟</span> <span class="pre">s</span></code> means that <code class="docutils literal notranslate"><span class="pre">u</span> <span class="pre">n</span></code> belongs to <code class="docutils literal notranslate"><span class="pre">s</span></code> for <code class="docutils literal notranslate"><span class="pre">n</span></code> large enough. Saying that <code class="docutils literal notranslate"><span class="pre">x</span></code> is a cluster point of <code class="docutils literal notranslate"><span class="pre">map</span> <span class="pre">u</span> <span class="pre">at_top</span></code> says the image of very large numbers large enough. Saying that <code class="docutils literal notranslate"><span class="pre">x</span></code> is a cluster point of <code class="docutils literal notranslate"><span class="pre">map</span> <span class="pre">u</span> <span class="pre">atTop</span></code> says the image of very large numbers intersects the set of points that are close to <code class="docutils literal notranslate"><span class="pre">x</span></code>. In case <code class="docutils literal notranslate"><span class="pre">𝓝</span> <span class="pre">x</span></code> has a countable basis, we can interpret this as saying that <code class="docutils literal notranslate"><span class="pre">u</span></code> has a subsequence converging to <code class="docutils literal notranslate"><span class="pre">x</span></code>, and we get back what compactness looks like in metric spaces.</p>
-
@@ -1188,14 +1189,9 @@ cover <code class="docutils literal notranslate"><span class="pre">s</span></cod<span class="n">hs.elim_finite_subcover</span> <span class="n">U</span> <span class="n">hUo</span> <span class="n">hsU</span> </pre></div> </div> <p>A topological space <code class="docutils literal notranslate"><span class="pre">X</span></code> is compact if <code class="docutils literal notranslate"><span class="pre">(univ</span> <span class="pre">:</span> <span class="pre">Set</span> <span class="pre">X)</span></code> is compact.</p> <div class="highlight-lean notranslate"><div class="highlight"><pre><span></span><span class="kd">example</span> <span class="o">[</span><span class="n">CompactSpace</span> <span class="n">X</span><span class="o">]</span> <span class="o">:</span> <span class="n">IsCompact</span> <span class="o">(</span><span class="n">univ</span> <span class="o">:</span> <span class="n">Set</span> <span class="n">X</span><span class="o">)</span> <span class="o">:=</span> <span class="n">isCompact_univ</span> </pre></div> </div> </div> </div> </div> </section> </section> </section> </div>
-
-
-
@@ -1,7 +1,8 @@<!DOCTYPE html> <html class="writer-html5" lang="en" > <head> <meta charset="utf-8" /> <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>9. Differential Calculus — Mathematics in Lean 0.1 documentation</title> <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
-
@@ -15,6 +16,7 @@<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script> <script src="_static/jquery.js"></script> <script src="_static/underscore.js"></script> <script src="_static/_sphinx_javascript_frameworks_compat.js"></script> <script src="_static/doctools.js"></script> <script async="async" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script> <script src="_static/js/theme.js"></script>
-
@@ -89,8 +91,8 @@<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> <div itemprop="articleBody"> <span class="target" id="differential-calculus"></span><div class="section" id="index-0"> <span id="id1"></span><h1><span class="section-number">9. </span>Differential Calculus<a class="headerlink" href="#index-0" title="Permalink to this headline"></a></h1> <span class="target" id="differential-calculus"></span><section id="index-0"> <span id="id1"></span><h1><span class="section-number">9. </span>Differential Calculus<a class="headerlink" href="#index-0" title="Permalink to this heading"></a></h1> <p>We now consider the formalization of notions from <em>analysis</em>, starting with differentiation in this chapter and turning integration and measure theory in the next.
-
@@ -99,8 +101,8 @@ setting of functions from the real numbers to the real numbers,which is familiar from any introductory calculus class. In <a class="reference internal" href="#normed-spaces"><span class="std std-numref">Section 9.2</span></a>, we then consider the notion of a derivative in a much broader setting.</p> <div class="section" id="elementary-differential-calculus"> <span id="index-1"></span><span id="id2"></span><h2><span class="section-number">9.1. </span>Elementary Differential Calculus<a class="headerlink" href="#elementary-differential-calculus" title="Permalink to this headline"></a></h2> <section id="elementary-differential-calculus"> <span id="index-1"></span><span id="id2"></span><h2><span class="section-number">9.1. </span>Elementary Differential Calculus<a class="headerlink" href="#elementary-differential-calculus" title="Permalink to this heading"></a></h2> <p>Let <code class="docutils literal notranslate"><span class="pre">f</span></code> be a function from the reals to the reals. There is a difference between talking about the derivative of <code class="docutils literal notranslate"><span class="pre">f</span></code> at a single point and talking about the derivative function.
-
@@ -173,11 +175,11 @@ seems even weirder.</p><span class="kd">example</span> <span class="o">:</span> <span class="n">deriv</span> <span class="n">sin</span> <span class="n">π</span> <span class="bp">=</span> <span class="bp">-</span><span class="mi">1</span> <span class="o">:=</span> <span class="kd">by</span> <span class="n">simp</span> </pre></div> </div> </div> <div class="section" id="differential-calculus-in-normed-spaces"> <span id="normed-spaces"></span><span id="index-2"></span><h2><span class="section-number">9.2. </span>Differential Calculus in Normed Spaces<a class="headerlink" href="#differential-calculus-in-normed-spaces" title="Permalink to this headline"></a></h2> <div class="section" id="id3"> <h3><span class="section-number">9.2.1. </span>Normed spaces<a class="headerlink" href="#id3" title="Permalink to this headline"></a></h3> </section> <section id="differential-calculus-in-normed-spaces"> <span id="normed-spaces"></span><span id="index-2"></span><h2><span class="section-number">9.2. </span>Differential Calculus in Normed Spaces<a class="headerlink" href="#differential-calculus-in-normed-spaces" title="Permalink to this heading"></a></h2> <section id="id3"> <h3><span class="section-number">9.2.1. </span>Normed spaces<a class="headerlink" href="#id3" title="Permalink to this heading"></a></h3> <p>Differentiation can be generalized beyond <code class="docutils literal notranslate"><span class="pre">ℝ</span></code> using the notion of a <em>normed vector space</em>, which encapsulates both direction and distance. We start with the notion of a <em>normed group</em>, which as an additive commutative
-
@@ -240,9 +242,9 @@ complete as long as the field itself is complete.</p><span class="n">FiniteDimensional.complete</span> <span class="bp">𝕜</span> <span class="n">E</span> </pre></div> </div> </div> <div class="section" id="continuous-linear-maps"> <h3><span class="section-number">9.2.2. </span>Continuous linear maps<a class="headerlink" href="#continuous-linear-maps" title="Permalink to this headline"></a></h3> </section> <section id="continuous-linear-maps"> <h3><span class="section-number">9.2.2. </span>Continuous linear maps<a class="headerlink" href="#continuous-linear-maps" title="Permalink to this heading"></a></h3> <p>We now turn to the morphisms in the category of normed spaces, namely, continuous linear maps. In mathlib, the type of <code class="docutils literal notranslate"><span class="pre">𝕜</span></code>-linear continuous maps between normed spaces
-
@@ -322,9 +324,9 @@ Minor ingredients include <code class="docutils literal notranslate"><span class<span class="gr">sorry</span> </pre></div> </div> </div> <div class="section" id="asymptotic-comparisons"> <h3><span class="section-number">9.2.3. </span>Asymptotic comparisons<a class="headerlink" href="#asymptotic-comparisons" title="Permalink to this headline"></a></h3> </section> <section id="asymptotic-comparisons"> <h3><span class="section-number">9.2.3. </span>Asymptotic comparisons<a class="headerlink" href="#asymptotic-comparisons" title="Permalink to this heading"></a></h3> <p>Defining differentiability also requires asymptotic comparisons. Mathlib has an extensive library covering the big O and little o relations, whose definitions are shown below.
-
@@ -350,9 +352,9 @@ Here we will only use little o to define differentiability.</p><span class="n">Iff.rfl</span> </pre></div> </div> </div> <div class="section" id="differentiability"> <h3><span class="section-number">9.2.4. </span>Differentiability<a class="headerlink" href="#differentiability" title="Permalink to this headline"></a></h3> </section> <section id="differentiability"> <h3><span class="section-number">9.2.4. </span>Differentiability<a class="headerlink" href="#differentiability" title="Permalink to this heading"></a></h3> <p>We are now ready to discuss differentiable functions between normed spaces. In analogy the elementary one-dimensional, mathlib defines a predicate <code class="docutils literal notranslate"><span class="pre">HasFDerivAt</span></code> and a function <code class="docutils literal notranslate"><span class="pre">fderiv</span></code>.
-
@@ -435,9 +437,9 @@ For example, you may want to use one-sided derivatives in theone-dimensional setting. The means to do so are found in mathlib in a more general context; see <code class="docutils literal notranslate"><span class="pre">HasFDerivWithinAt</span></code> or the even more general <code class="docutils literal notranslate"><span class="pre">HasFDerivAtFilter</span></code>.</p> </div> </div> </div> </section> </section> </section> </div>
-
-
-
@@ -1,7 +1,8 @@<!DOCTYPE html> <html class="writer-html5" lang="en" > <head> <meta charset="utf-8" /> <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>10. Integration and Measure Theory — Mathematics in Lean 0.1 documentation</title> <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
-
@@ -15,6 +16,7 @@<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script> <script src="_static/jquery.js"></script> <script src="_static/underscore.js"></script> <script src="_static/_sphinx_javascript_frameworks_compat.js"></script> <script src="_static/doctools.js"></script> <script async="async" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script> <script src="_static/js/theme.js"></script>
-
@@ -84,10 +86,10 @@<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> <div itemprop="articleBody"> <span class="target" id="integration-and-measure-theory"></span><div class="section" id="index-0"> <span id="id1"></span><h1><span class="section-number">10. </span>Integration and Measure Theory<a class="headerlink" href="#index-0" title="Permalink to this headline"></a></h1> <div class="section" id="elementary-integration"> <span id="index-1"></span><span id="id2"></span><h2><span class="section-number">10.1. </span>Elementary Integration<a class="headerlink" href="#elementary-integration" title="Permalink to this headline"></a></h2> <span class="target" id="integration-and-measure-theory"></span><section id="index-0"> <span id="id1"></span><h1><span class="section-number">10. </span>Integration and Measure Theory<a class="headerlink" href="#index-0" title="Permalink to this heading"></a></h1> <section id="elementary-integration"> <span id="index-1"></span><span id="id2"></span><h2><span class="section-number">10.1. </span>Elementary Integration<a class="headerlink" href="#elementary-integration" title="Permalink to this heading"></a></h2> <p>We first focus on integration of functions on finite intervals in <code class="docutils literal notranslate"><span class="pre">ℝ</span></code>. We can integrate elementary functions.</p> <div class="highlight-lean notranslate"><div class="highlight"><pre><span></span><span class="kn">open</span> <span class="n">MeasureTheory</span> <span class="n">intervalIntegral</span>
-
@@ -124,9 +126,9 @@ which are not shown here, are not equivalent.)</p><span class="n">rfl</span> </pre></div> </div> </div> <div class="section" id="measure-theory"> <span id="index-2"></span><span id="id3"></span><h2><span class="section-number">10.2. </span>Measure Theory<a class="headerlink" href="#measure-theory" title="Permalink to this headline"></a></h2> </section> <section id="measure-theory"> <span id="index-2"></span><span id="id3"></span><h2><span class="section-number">10.2. </span>Measure Theory<a class="headerlink" href="#measure-theory" title="Permalink to this heading"></a></h2> <p>The general context for integration in mathlib is measure theory. Even the elementary integrals of the previous section are in fact Bochner integrals. Bochner integration is a generalization of Lebesgue integration where the target space can be any Banach space,
-
@@ -201,9 +203,9 @@ almost everywhere.</p><span class="n">Iff.rfl</span> </pre></div> </div> </div> <div class="section" id="integration"> <span id="id4"></span><h2><span class="section-number">10.3. </span>Integration<a class="headerlink" href="#integration" title="Permalink to this headline"></a></h2> </section> <section id="integration"> <span id="id4"></span><h2><span class="section-number">10.3. </span>Integration<a class="headerlink" href="#integration" title="Permalink to this heading"></a></h2> <p>Now that we have measurable spaces and measures we can consider integrals. As explained above, mathlib uses a very general notion of integration that allows any Banach space as the target.
-
@@ -278,8 +280,8 @@ gives finite mass to compact sets, and give positive mass to open sets.</p><span class="n">integral_image_eq_integral_abs_det_fderiv_smul</span> <span class="n">μ</span> <span class="n">hs</span> <span class="n">hf</span> <span class="n">h_inj</span> <span class="n">g</span> </pre></div> </div> </div> </div> </section> </section> </div>
-
-
-
@@ -0,0 +1,134 @@/* * _sphinx_javascript_frameworks_compat.js * ~~~~~~~~~~ * * Compatability shim for jQuery and underscores.js. * * WILL BE REMOVED IN Sphinx 6.0 * xref RemovedInSphinx60Warning * */ /** * select a different prefix for underscore */ $u = _.noConflict(); /** * small helper function to urldecode strings * * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL */ jQuery.urldecode = function(x) { if (!x) { return x } return decodeURIComponent(x.replace(/\+/g, ' ')); }; /** * small helper function to urlencode strings */ jQuery.urlencode = encodeURIComponent; /** * This function returns the parsed url parameters of the * current request. Multiple values per key are supported, * it will always return arrays of strings for the value parts. */ jQuery.getQueryParameters = function(s) { if (typeof s === 'undefined') s = document.location.search; var parts = s.substr(s.indexOf('?') + 1).split('&'); var result = {}; for (var i = 0; i < parts.length; i++) { var tmp = parts[i].split('=', 2); var key = jQuery.urldecode(tmp[0]); var value = jQuery.urldecode(tmp[1]); if (key in result) result[key].push(value); else result[key] = [value]; } return result; }; /** * highlight a given string on a jquery object by wrapping it in * span elements with the given class name. */ jQuery.fn.highlightText = function(text, className) { function highlight(node, addItems) { if (node.nodeType === 3) { var val = node.nodeValue; var pos = val.toLowerCase().indexOf(text); if (pos >= 0 && !jQuery(node.parentNode).hasClass(className) && !jQuery(node.parentNode).hasClass("nohighlight")) { var span; var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); if (isInSVG) { span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); } else { span = document.createElement("span"); span.className = className; } span.appendChild(document.createTextNode(val.substr(pos, text.length))); node.parentNode.insertBefore(span, node.parentNode.insertBefore( document.createTextNode(val.substr(pos + text.length)), node.nextSibling)); node.nodeValue = val.substr(0, pos); if (isInSVG) { var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); var bbox = node.parentElement.getBBox(); rect.x.baseVal.value = bbox.x; rect.y.baseVal.value = bbox.y; rect.width.baseVal.value = bbox.width; rect.height.baseVal.value = bbox.height; rect.setAttribute('class', className); addItems.push({ "parent": node.parentNode, "target": rect}); } } } else if (!jQuery(node).is("button, select, textarea")) { jQuery.each(node.childNodes, function() { highlight(this, addItems); }); } } var addItems = []; var result = this.each(function() { highlight(this, addItems); }); for (var i = 0; i < addItems.length; ++i) { jQuery(addItems[i].parent).before(addItems[i].target); } return result; }; /* * backward compatibility for jQuery.browser * This will be supported until firefox bug is fixed. */ if (!jQuery.browser) { jQuery.uaMatch = function(ua) { ua = ua.toLowerCase(); var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || /(webkit)[ \/]([\w.]+)/.exec(ua) || /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || /(msie) ([\w.]+)/.exec(ua) || ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || []; return { browser: match[ 1 ] || "", version: match[ 2 ] || "0" }; }; jQuery.browser = {}; jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; }
-
-
-
@@ -222,7 +222,7 @@ table.modindextable td {/* -- general body styles --------------------------------------------------- */ div.body { min-width: 450px; min-width: 360px; max-width: 800px; }
-
@@ -335,13 +335,13 @@ p.sidebar-title {font-weight: bold; } div.admonition, div.topic, blockquote { div.admonition, div.topic, aside.topic, blockquote { clear: left; } /* -- topics ---------------------------------------------------------------- */ div.topic { div.topic, aside.topic { border: 1px solid #ccc; padding: 7px; margin: 10px 0 10px 0;
-
@@ -380,6 +380,7 @@ div.body p.centered {div.sidebar > :last-child, aside.sidebar > :last-child, div.topic > :last-child, aside.topic > :last-child, div.admonition > :last-child { margin-bottom: 0; }
-
@@ -387,6 +388,7 @@ div.admonition > :last-child {div.sidebar::after, aside.sidebar::after, div.topic::after, aside.topic::after, div.admonition::after, blockquote::after { display: block;
-
@@ -428,10 +430,6 @@ table.docutils td, table.docutils th {border-bottom: 1px solid #aaa; } table.footnote td, table.footnote th { border: 0 !important; } th { text-align: left; padding-right: 5px;
-
@@ -615,6 +613,7 @@ ul.simple p {margin-bottom: 0; } /* Docutils 0.17 and older (footnotes & citations) */ dl.footnote > dt, dl.citation > dt { float: left;
-
@@ -632,6 +631,33 @@ dl.citation > dd:after {clear: both; } /* Docutils 0.18+ (footnotes & citations) */ aside.footnote > span, div.citation > span { float: left; } aside.footnote > span:last-of-type, div.citation > span:last-of-type { padding-right: 0.5em; } aside.footnote > p { margin-left: 2em; } div.citation > p { margin-left: 4em; } aside.footnote > p:last-of-type, div.citation > p:last-of-type { margin-bottom: 0em; } aside.footnote > p:last-of-type:after, div.citation > p:last-of-type:after { content: ""; clear: both; } /* Footnotes & citations ends */ dl.field-list { display: grid; grid-template-columns: fit-content(30%) auto;
-
-
-
@@ -2,325 +2,263 @@* doctools.js * ~~~~~~~~~~~ * * Sphinx JavaScript utilities for all documentation. * Base JavaScript utilities for all Sphinx HTML documentation. * * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ "use strict"; /** * select a different prefix for underscore */ $u = _.noConflict(); /** * make the code below compatible with browsers without * an installed firebug like debugger if (!window.console || !console.firebug) { var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"]; window.console = {}; for (var i = 0; i < names.length; ++i) window.console[names[i]] = function() {}; } */ /** * small helper function to urldecode strings * * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL */ jQuery.urldecode = function(x) { if (!x) { return x const _ready = (callback) => { if (document.readyState !== "loading") { callback(); } else { document.addEventListener("DOMContentLoaded", callback); } return decodeURIComponent(x.replace(/\+/g, ' ')); }; /** * small helper function to urlencode strings * highlight a given string on a node by wrapping it in * span elements with the given class name. */ jQuery.urlencode = encodeURIComponent; const _highlight = (node, addItems, text, className) => { if (node.nodeType === Node.TEXT_NODE) { const val = node.nodeValue; const parent = node.parentNode; const pos = val.toLowerCase().indexOf(text); if ( pos >= 0 && !parent.classList.contains(className) && !parent.classList.contains("nohighlight") ) { let span; /** * This function returns the parsed url parameters of the * current request. Multiple values per key are supported, * it will always return arrays of strings for the value parts. */ jQuery.getQueryParameters = function(s) { if (typeof s === 'undefined') s = document.location.search; var parts = s.substr(s.indexOf('?') + 1).split('&'); var result = {}; for (var i = 0; i < parts.length; i++) { var tmp = parts[i].split('=', 2); var key = jQuery.urldecode(tmp[0]); var value = jQuery.urldecode(tmp[1]); if (key in result) result[key].push(value); else result[key] = [value]; } return result; }; const closestNode = parent.closest("body, svg, foreignObject"); const isInSVG = closestNode && closestNode.matches("svg"); if (isInSVG) { span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); } else { span = document.createElement("span"); span.classList.add(className); } /** * highlight a given string on a jquery object by wrapping it in * span elements with the given class name. */ jQuery.fn.highlightText = function(text, className) { function highlight(node, addItems) { if (node.nodeType === 3) { var val = node.nodeValue; var pos = val.toLowerCase().indexOf(text); if (pos >= 0 && !jQuery(node.parentNode).hasClass(className) && !jQuery(node.parentNode).hasClass("nohighlight")) { var span; var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); if (isInSVG) { span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); } else { span = document.createElement("span"); span.className = className; } span.appendChild(document.createTextNode(val.substr(pos, text.length))); node.parentNode.insertBefore(span, node.parentNode.insertBefore( span.appendChild(document.createTextNode(val.substr(pos, text.length))); parent.insertBefore( span, parent.insertBefore( document.createTextNode(val.substr(pos + text.length)), node.nextSibling)); node.nodeValue = val.substr(0, pos); if (isInSVG) { var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); var bbox = node.parentElement.getBBox(); rect.x.baseVal.value = bbox.x; rect.y.baseVal.value = bbox.y; rect.width.baseVal.value = bbox.width; rect.height.baseVal.value = bbox.height; rect.setAttribute('class', className); addItems.push({ "parent": node.parentNode, "target": rect}); } node.nextSibling ) ); node.nodeValue = val.substr(0, pos); if (isInSVG) { const rect = document.createElementNS( "http://www.w3.org/2000/svg", "rect" ); const bbox = parent.getBBox(); rect.x.baseVal.value = bbox.x; rect.y.baseVal.value = bbox.y; rect.width.baseVal.value = bbox.width; rect.height.baseVal.value = bbox.height; rect.setAttribute("class", className); addItems.push({ parent: parent, target: rect }); } } else if (!jQuery(node).is("button, select, textarea")) { jQuery.each(node.childNodes, function() { highlight(this, addItems); }); } } else if (node.matches && !node.matches("button, select, textarea")) { node.childNodes.forEach((el) => _highlight(el, addItems, text, className)); } var addItems = []; var result = this.each(function() { highlight(this, addItems); }); for (var i = 0; i < addItems.length; ++i) { jQuery(addItems[i].parent).before(addItems[i].target); } return result; }; /* * backward compatibility for jQuery.browser * This will be supported until firefox bug is fixed. */ if (!jQuery.browser) { jQuery.uaMatch = function(ua) { ua = ua.toLowerCase(); var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || /(webkit)[ \/]([\w.]+)/.exec(ua) || /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || /(msie) ([\w.]+)/.exec(ua) || ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || []; return { browser: match[ 1 ] || "", version: match[ 2 ] || "0" }; }; jQuery.browser = {}; jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; } const _highlightText = (thisNode, text, className) => { let addItems = []; _highlight(thisNode, addItems, text, className); addItems.forEach((obj) => obj.parent.insertAdjacentElement("beforebegin", obj.target) ); }; /** * Small JavaScript module for the documentation. */ var Documentation = { init : function() { this.fixFirefoxAnchorBug(); this.highlightSearchWords(); this.initIndexTable(); if (DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) { this.initOnKeyListeners(); } const Documentation = { init: () => { Documentation.highlightSearchWords(); Documentation.initDomainIndexTable(); Documentation.initOnKeyListeners(); }, /** * i18n support */ TRANSLATIONS : {}, PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; }, LOCALE : 'unknown', TRANSLATIONS: {}, PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), LOCALE: "unknown", // gettext and ngettext don't access this so that the functions // can safely bound to a different name (_ = Documentation.gettext) gettext : function(string) { var translated = Documentation.TRANSLATIONS[string]; if (typeof translated === 'undefined') return string; return (typeof translated === 'string') ? translated : translated[0]; }, ngettext : function(singular, plural, n) { var translated = Documentation.TRANSLATIONS[singular]; if (typeof translated === 'undefined') return (n == 1) ? singular : plural; return translated[Documentation.PLURALEXPR(n)]; }, addTranslations : function(catalog) { for (var key in catalog.messages) this.TRANSLATIONS[key] = catalog.messages[key]; this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); this.LOCALE = catalog.locale; gettext: (string) => { const translated = Documentation.TRANSLATIONS[string]; switch (typeof translated) { case "undefined": return string; // no translation case "string": return translated; // translation exists default: return translated[0]; // (singular, plural) translation tuple exists } }, /** * add context elements like header anchor links */ addContextElements : function() { $('div[id] > :header:first').each(function() { $('<a class="headerlink">\u00B6</a>'). attr('href', '#' + this.id). attr('title', _('Permalink to this headline')). appendTo(this); }); $('dt[id]').each(function() { $('<a class="headerlink">\u00B6</a>'). attr('href', '#' + this.id). attr('title', _('Permalink to this definition')). appendTo(this); }); ngettext: (singular, plural, n) => { const translated = Documentation.TRANSLATIONS[singular]; if (typeof translated !== "undefined") return translated[Documentation.PLURAL_EXPR(n)]; return n === 1 ? singular : plural; }, /** * workaround a firefox stupidity * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075 */ fixFirefoxAnchorBug : function() { if (document.location.hash && $.browser.mozilla) window.setTimeout(function() { document.location.href += ''; }, 10); addTranslations: (catalog) => { Object.assign(Documentation.TRANSLATIONS, catalog.messages); Documentation.PLURAL_EXPR = new Function( "n", `return (${catalog.plural_expr})` ); Documentation.LOCALE = catalog.locale; }, /** * highlight the search words provided in the url in the text */ highlightSearchWords : function() { var params = $.getQueryParameters(); var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; if (terms.length) { var body = $('div.body'); if (!body.length) { body = $('body'); } window.setTimeout(function() { $.each(terms, function() { body.highlightText(this.toLowerCase(), 'highlighted'); }); }, 10); $('<p class="highlight-link"><a href="javascript:Documentation.' + 'hideSearchWords()">' + _('Hide Search Matches') + '</a></p>') .appendTo($('#searchbox')); } }, highlightSearchWords: () => { const highlight = new URLSearchParams(window.location.search).get("highlight") || ""; const terms = highlight.toLowerCase().split(/\s+/).filter(x => x); if (terms.length === 0) return; // nothing to do /** * init the domain index toggle buttons */ initIndexTable : function() { var togglers = $('img.toggler').click(function() { var src = $(this).attr('src'); var idnum = $(this).attr('id').substr(7); $('tr.cg-' + idnum).toggle(); if (src.substr(-9) === 'minus.png') $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); else $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); }).css('display', ''); if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { togglers.click(); } // There should never be more than one element matching "div.body" const divBody = document.querySelectorAll("div.body"); const body = divBody.length ? divBody[0] : document.querySelector("body"); window.setTimeout(() => { terms.forEach((term) => _highlightText(body, term, "highlighted")); }, 10); const searchBox = document.getElementById("searchbox"); if (searchBox === null) return; searchBox.appendChild( document .createRange() .createContextualFragment( '<p class="highlight-link">' + '<a href="javascript:Documentation.hideSearchWords()">' + Documentation.gettext("Hide Search Matches") + "</a></p>" ) ); }, /** * helper function to hide the search marks again */ hideSearchWords : function() { $('#searchbox .highlight-link').fadeOut(300); $('span.highlighted').removeClass('highlighted'); var url = new URL(window.location); url.searchParams.delete('highlight'); window.history.replaceState({}, '', url); hideSearchWords: () => { document .querySelectorAll("#searchbox .highlight-link") .forEach((el) => el.remove()); document .querySelectorAll("span.highlighted") .forEach((el) => el.classList.remove("highlighted")); const url = new URL(window.location); url.searchParams.delete("highlight"); window.history.replaceState({}, "", url); }, /** * make the url absolute * helper function to focus on search bar */ makeURL : function(relativeURL) { return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; focusSearchBar: () => { document.querySelectorAll("input[name=q]")[0]?.focus(); }, /** * get the current relative url * Initialise the domain index toggle buttons */ getCurrentURL : function() { var path = document.location.pathname; var parts = path.split(/\//); $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { if (this === '..') parts.pop(); }); var url = parts.join('/'); return path.substring(url.lastIndexOf('/') + 1, path.length - 1); initDomainIndexTable: () => { const toggler = (el) => { const idNumber = el.id.substr(7); const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); if (el.src.substr(-9) === "minus.png") { el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; toggledRows.forEach((el) => (el.style.display = "none")); } else { el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; toggledRows.forEach((el) => (el.style.display = "")); } }; const togglerElements = document.querySelectorAll("img.toggler"); togglerElements.forEach((el) => el.addEventListener("click", (event) => toggler(event.currentTarget)) ); togglerElements.forEach((el) => (el.style.display = "")); if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); }, initOnKeyListeners: function() { $(document).keydown(function(event) { var activeElementType = document.activeElement.tagName; // don't navigate when in search box, textarea, dropdown or button if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT' && activeElementType !== 'BUTTON' && !event.altKey && !event.ctrlKey && !event.metaKey && !event.shiftKey) { switch (event.keyCode) { case 37: // left var prevHref = $('link[rel="prev"]').prop('href'); if (prevHref) { window.location.href = prevHref; return false; initOnKeyListeners: () => { // only install a listener if it is really needed if ( !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS ) return; const blacklistedElements = new Set([ "TEXTAREA", "INPUT", "SELECT", "BUTTON", ]); document.addEventListener("keydown", (event) => { if (blacklistedElements.has(document.activeElement.tagName)) return; // bail for input elements if (event.altKey || event.ctrlKey || event.metaKey) return; // bail with special keys if (!event.shiftKey) { switch (event.key) { case "ArrowLeft": if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; const prevLink = document.querySelector('link[rel="prev"]'); if (prevLink && prevLink.href) { window.location.href = prevLink.href; event.preventDefault(); } break; case 39: // right var nextHref = $('link[rel="next"]').prop('href'); if (nextHref) { window.location.href = nextHref; return false; case "ArrowRight": if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; const nextLink = document.querySelector('link[rel="next"]'); if (nextLink && nextLink.href) { window.location.href = nextLink.href; event.preventDefault(); } break; case "Escape": if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; Documentation.hideSearchWords(); event.preventDefault(); } } // some keyboard layouts may need Shift to get / switch (event.key) { case "/": if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; Documentation.focusSearchBar(); event.preventDefault(); } }); } }, }; // quick alias for translations _ = Documentation.gettext; const _ = Documentation.gettext; $(document).ready(function() { Documentation.init(); }); _ready(Documentation.init);
-
-
-
@@ -1,12 +1,14 @@var DOCUMENTATION_OPTIONS = { URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), VERSION: '0.1', LANGUAGE: 'None', LANGUAGE: 'en', COLLAPSE_INDEX: false, BUILDER: 'html', FILE_SUFFIX: '.html', LINK_SUFFIX: '.html', HAS_SOURCE: true, SOURCELINK_SUFFIX: '.txt', NAVIGATION_WITH_KEYS: false NAVIGATION_WITH_KEYS: false, SHOW_SEARCH_SUMMARY: true, ENABLE_SEARCH_SHORTCUTS: false, };
-
-
-
@@ -1,15 +1,15 @@/*! * jQuery JavaScript Library v3.5.1 * jQuery JavaScript Library v3.6.0 * https://jquery.com/ * * Includes Sizzle.js * https://sizzlejs.com/ * * Copyright JS Foundation and other contributors * Copyright OpenJS Foundation and other contributors * Released under the MIT license * https://jquery.org/license * * Date: 2020-05-04T22:49Z * Date: 2021-03-02T17:08Z */ ( function( global, factory ) {
-
@@ -76,12 +76,16 @@ var support = {};var isFunction = function isFunction( obj ) { // Support: Chrome <=57, Firefox <=52 // In some browsers, typeof returns "function" for HTML <object> elements // (i.e., `typeof document.createElement( "object" ) === "function"`). // We don't want to classify *any* DOM node as a function. return typeof obj === "function" && typeof obj.nodeType !== "number"; }; // Support: Chrome <=57, Firefox <=52 // In some browsers, typeof returns "function" for HTML <object> elements // (i.e., `typeof document.createElement( "object" ) === "function"`). // We don't want to classify *any* DOM node as a function. // Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5 // Plus for old WebKit, typeof returns "function" for HTML collections // (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756) return typeof obj === "function" && typeof obj.nodeType !== "number" && typeof obj.item !== "function"; }; var isWindow = function isWindow( obj ) {
-
@@ -147,7 +151,7 @@ function toType( obj ) {var version = "3.5.1", version = "3.6.0", // Define a local copy of jQuery jQuery = function( selector, context ) {
-
@@ -401,7 +405,7 @@ jQuery.extend( {if ( isArrayLike( Object( arr ) ) ) { jQuery.merge( ret, typeof arr === "string" ? [ arr ] : arr [ arr ] : arr ); } else { push.call( ret, arr );
-
@@ -496,9 +500,9 @@ if ( typeof Symbol === "function" ) {// Populate the class2type map jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), function( _i, name ) { class2type[ "[object " + name + "]" ] = name.toLowerCase(); } ); function( _i, name ) { class2type[ "[object " + name + "]" ] = name.toLowerCase(); } ); function isArrayLike( obj ) {
-
@@ -518,14 +522,14 @@ function isArrayLike( obj ) {} var Sizzle = /*! * Sizzle CSS Selector Engine v2.3.5 * Sizzle CSS Selector Engine v2.3.6 * https://sizzlejs.com/ * * Copyright JS Foundation and other contributors * Released under the MIT license * https://js.foundation/ * * Date: 2020-03-14 * Date: 2021-02-16 */ ( function( window ) { var i,
-
@@ -1108,8 +1112,8 @@ support = Sizzle.support = {};* @returns {Boolean} True iff elem is a non-HTML XML node */ isXML = Sizzle.isXML = function( elem ) { var namespace = elem.namespaceURI, docElem = ( elem.ownerDocument || elem ).documentElement; var namespace = elem && elem.namespaceURI, docElem = elem && ( elem.ownerDocument || elem ).documentElement; // Support: IE <=8 // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes
-
@@ -3024,9 +3028,9 @@ var rneedsContext = jQuery.expr.match.needsContext;function nodeName( elem, name ) { return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); }; } var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
-
@@ -3997,8 +4001,8 @@ jQuery.extend( {resolveContexts = Array( i ), resolveValues = slice.call( arguments ), // the master Deferred master = jQuery.Deferred(), // the primary Deferred primary = jQuery.Deferred(), // subordinate callback factory updateFunc = function( i ) {
-
@@ -4006,30 +4010,30 @@ jQuery.extend( {resolveContexts[ i ] = this; resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; if ( !( --remaining ) ) { master.resolveWith( resolveContexts, resolveValues ); primary.resolveWith( resolveContexts, resolveValues ); } }; }; // Single- and empty arguments are adopted like Promise.resolve if ( remaining <= 1 ) { adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject, !remaining ); // Use .then() to unwrap secondary thenables (cf. gh-3000) if ( master.state() === "pending" || if ( primary.state() === "pending" || isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { return master.then(); return primary.then(); } } // Multiple arguments are aggregated like Promise.all array elements while ( i-- ) { adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject ); } return master.promise(); return primary.promise(); } } );
-
@@ -4180,8 +4184,8 @@ var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {for ( ; i < len; i++ ) { fn( elems[ i ], key, raw ? value : value.call( elems[ i ], i, fn( elems[ i ], key ) ) value : value.call( elems[ i ], i, fn( elems[ i ], key ) ) ); } }
-
@@ -5089,10 +5093,7 @@ function buildFragment( elems, context, scripts, selection, ignored ) {} var rkeyEvent = /^key/, rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, rtypenamespace = /^([^.]*)(?:\.(.+)|)/; var rtypenamespace = /^([^.]*)(?:\.(.+)|)/; function returnTrue() { return true;
-
@@ -5387,8 +5388,8 @@ jQuery.event = {event = jQuery.event.fix( nativeEvent ), handlers = ( dataPriv.get( this, "events" ) || Object.create( null ) )[ event.type ] || [], dataPriv.get( this, "events" ) || Object.create( null ) )[ event.type ] || [], special = jQuery.event.special[ event.type ] || {}; // Use the fix-ed jQuery.Event rather than the (read-only) native event
-
@@ -5512,12 +5513,12 @@ jQuery.event = {get: isFunction( hook ) ? function() { if ( this.originalEvent ) { return hook( this.originalEvent ); return hook( this.originalEvent ); } } : function() { if ( this.originalEvent ) { return this.originalEvent[ name ]; return this.originalEvent[ name ]; } },
-
@@ -5656,7 +5657,13 @@ function leverageNative( el, type, expectSync ) {// Cancel the outer synthetic event event.stopImmediatePropagation(); event.preventDefault(); return result.value; // Support: Chrome 86+ // In Chrome, if an element having a focusout handler is blurred by // clicking outside of it, it invokes the handler synchronously. If // that handler calls `.remove()` on the element, the data is cleared, // leaving `result` undefined. We need to guard against this. return result && result.value; } // If this is an inner synthetic event for an event with a bubbling surrogate
-
@@ -5821,34 +5828,7 @@ jQuery.each( {targetTouches: true, toElement: true, touches: true, which: function( event ) { var button = event.button; // Add which for key events if ( event.which == null && rkeyEvent.test( event.type ) ) { return event.charCode != null ? event.charCode : event.keyCode; } // Add which for click: 1 === left; 2 === middle; 3 === right if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { if ( button & 1 ) { return 1; } if ( button & 2 ) { return 3; } if ( button & 4 ) { return 2; } return 0; } return event.which; } which: true }, jQuery.event.addProp ); jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) {
-
@@ -5874,6 +5854,12 @@ jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateTypreturn true; }, // Suppress native focus or blur as it's already being fired // in leverageNative. _default: function() { return true; }, delegateType: delegateType }; } );
-
@@ -6541,6 +6527,10 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );// set in CSS while `offset*` properties report correct values. // Behavior in IE 9 is more subtle than in newer versions & it passes // some versions of this test; make sure not to make it pass there! // // Support: Firefox 70+ // Only Firefox includes border widths // in computed dimensions. (gh-4529) reliableTrDimensions: function() { var table, tr, trChild, trStyle; if ( reliableTrDimensionsVal == null ) {
-
@@ -6548,17 +6538,32 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );tr = document.createElement( "tr" ); trChild = document.createElement( "div" ); table.style.cssText = "position:absolute;left:-11111px"; table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate"; tr.style.cssText = "border:1px solid"; // Support: Chrome 86+ // Height set through cssText does not get applied. // Computed height then comes back as 0. tr.style.height = "1px"; trChild.style.height = "9px"; // Support: Android 8 Chrome 86+ // In our bodyBackground.html iframe, // display for all div elements is set to "inline", // which causes a problem only in Android 8 Chrome 86. // Ensuring the div is display: block // gets around this issue. trChild.style.display = "block"; documentElement .appendChild( table ) .appendChild( tr ) .appendChild( trChild ); trStyle = window.getComputedStyle( tr ); reliableTrDimensionsVal = parseInt( trStyle.height ) > 3; reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) + parseInt( trStyle.borderTopWidth, 10 ) + parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight; documentElement.removeChild( table ); }
-
@@ -7022,10 +7027,10 @@ jQuery.each( [ "height", "width" ], function( _i, dimension ) {// Running getBoundingClientRect on a disconnected node // in IE throws an error. ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? swap( elem, cssShow, function() { return getWidthOrHeight( elem, dimension, extra ); } ) : getWidthOrHeight( elem, dimension, extra ); swap( elem, cssShow, function() { return getWidthOrHeight( elem, dimension, extra ); } ) : getWidthOrHeight( elem, dimension, extra ); } },
-
@@ -7084,7 +7089,7 @@ jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,swap( elem, { marginLeft: 0 }, function() { return elem.getBoundingClientRect().left; } ) ) + "px"; ) + "px"; } } );
-
@@ -7223,7 +7228,7 @@ Tween.propHooks = {if ( jQuery.fx.step[ tween.prop ] ) { jQuery.fx.step[ tween.prop ]( tween ); } else if ( tween.elem.nodeType === 1 && ( jQuery.cssHooks[ tween.prop ] || jQuery.cssHooks[ tween.prop ] || tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); } else {
-
@@ -7468,7 +7473,7 @@ function defaultPrefilter( elem, props, opts ) {anim.done( function() { /* eslint-enable no-loop-func */ /* eslint-enable no-loop-func */ // The final step of a "hide" animation is actually hiding the element if ( !hidden ) {
-
@@ -7588,7 +7593,7 @@ function Animation( elem, properties, options ) {tweens: [], createTween: function( prop, end ) { var tween = jQuery.Tween( elem, animation.opts, prop, end, animation.opts.specialEasing[ prop ] || animation.opts.easing ); animation.opts.specialEasing[ prop ] || animation.opts.easing ); animation.tweens.push( tween ); return tween; },
-
@@ -7761,7 +7766,8 @@ jQuery.fn.extend( {anim.stop( true ); } }; doAnimation.finish = doAnimation; doAnimation.finish = doAnimation; return empty || optall.queue === false ? this.each( doAnimation ) :
-
@@ -8401,8 +8407,8 @@ jQuery.fn.extend( {if ( this.setAttribute ) { this.setAttribute( "class", className || value === false ? "" : dataPriv.get( this, "__className__" ) || "" "" : dataPriv.get( this, "__className__" ) || "" ); } }
-
@@ -8417,7 +8423,7 @@ jQuery.fn.extend( {while ( ( elem = this[ i++ ] ) ) { if ( elem.nodeType === 1 && ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { return true; return true; } }
-
@@ -8707,9 +8713,7 @@ jQuery.extend( jQuery.event, {special.bindType || type; // jQuery handler handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] && handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] && dataPriv.get( cur, "handle" ); if ( handle ) { handle.apply( cur, data );
-
@@ -8856,7 +8860,7 @@ var rquery = ( /\?/ );// Cross-browser xml parsing jQuery.parseXML = function( data ) { var xml; var xml, parserErrorElem; if ( !data || typeof data !== "string" ) { return null; }
-
@@ -8865,12 +8869,17 @@ jQuery.parseXML = function( data ) {// IE throws on parseFromString with invalid input. try { xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); } catch ( e ) { xml = undefined; } } catch ( e ) {} if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { jQuery.error( "Invalid XML: " + data ); parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ]; if ( !xml || parserErrorElem ) { jQuery.error( "Invalid XML: " + ( parserErrorElem ? jQuery.map( parserErrorElem.childNodes, function( el ) { return el.textContent; } ).join( "\n" ) : data ) ); } return xml; };
-
@@ -8971,16 +8980,14 @@ jQuery.fn.extend( {// Can add propHook for "elements" to filter or add form elements var elements = jQuery.prop( this, "elements" ); return elements ? jQuery.makeArray( elements ) : this; } ) .filter( function() { } ).filter( function() { var type = this.type; // Use .is( ":disabled" ) so that fieldset[disabled] works return this.name && !jQuery( this ).is( ":disabled" ) && rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && ( this.checked || !rcheckableType.test( type ) ); } ) .map( function( _i, elem ) { } ).map( function( _i, elem ) { var val = jQuery( this ).val(); if ( val == null ) {
-
@@ -9033,7 +9040,8 @@ var// Anchor tag for parsing the document origin originAnchor = document.createElement( "a" ); originAnchor.href = location.href; originAnchor.href = location.href; // Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport function addToPrefiltersOrTransports( structure ) {
-
@@ -9414,8 +9422,8 @@ jQuery.extend( {// Context for global events is callbackContext if it is a DOM node or jQuery collection globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ? jQuery( callbackContext ) : jQuery.event, jQuery( callbackContext ) : jQuery.event, // Deferreds deferred = jQuery.Deferred(),
-
@@ -9727,8 +9735,10 @@ jQuery.extend( {response = ajaxHandleResponses( s, jqXHR, responses ); } // Use a noop converter for missing script if ( !isSuccess && jQuery.inArray( "script", s.dataTypes ) > -1 ) { // Use a noop converter for missing script but not if jsonp if ( !isSuccess && jQuery.inArray( "script", s.dataTypes ) > -1 && jQuery.inArray( "json", s.dataTypes ) < 0 ) { s.converters[ "text script" ] = function() {}; }
-
@@ -10466,12 +10476,6 @@ jQuery.offset = {options.using.call( elem, props ); } else { if ( typeof props.top === "number" ) { props.top += "px"; } if ( typeof props.left === "number" ) { props.left += "px"; } curElem.css( props ); } }
-
@@ -10640,8 +10644,11 @@ jQuery.each( [ "top", "left" ], function( _i, prop ) {// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) { jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) { // Margin is only for outerHeight, outerWidth jQuery.fn[ funcName ] = function( margin, value ) {
-
@@ -10726,7 +10733,8 @@ jQuery.fn.extend( {} } ); jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " + jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + "change select submit keydown keypress keyup contextmenu" ).split( " " ), function( _i, name ) {
-
@@ -10737,7 +10745,8 @@ jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " +this.on( name, null, data, fn ) : this.trigger( name ); }; } ); } );
-
-
-
@@ -1,2 +1,2 @@/*! jQuery v3.5.1 | (c) JS Foundation and other contributors | jquery.org/license */ !function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.5.1",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}S.fn=S.prototype={jquery:f,constructor:S,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=S.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return S.each(this,e)},map:function(n){return this.pushStack(S.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(S.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(S.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},S.extend=S.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(S.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||S.isPlainObject(n)?n:{},i=!1,a[t]=S.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},S.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==o.call(e))&&(!(t=r(e))||"function"==typeof(n=v.call(t,"constructor")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){b(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(p(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},makeArray:function(e,t){var n=t||[];return null!=e&&(p(Object(e))?S.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(p(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:y}),"function"==typeof Symbol&&(S.fn[Symbol.iterator]=t[Symbol.iterator]),S.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var d=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,E,v,s,c,y,S="sizzle"+1*new Date,p=n.document,k=0,r=0,m=ue(),x=ue(),A=ue(),N=ue(),D=function(e,t){return e===t&&(l=!0),0},j={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",I="(?:\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",W="\\["+M+"*("+I+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+I+"))|)"+M+"*\\]",F=":("+I+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",B=new RegExp(M+"+","g"),$=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=new RegExp("^"+M+"*,"+M+"*"),z=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="<a id='"+S+"'></a><select id='"+S+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0<se(t,C,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!=C&&T(e),y(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!=C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&j.call(b.attrHandle,t.toLowerCase())?n(e,t,!E):void 0;return void 0!==r?r:d.attributes||!E?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+"").replace(re,ie)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,n=[],r=0,i=0;if(l=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(D),l){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return u=null,e},o=se.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else while(t=e[r++])n+=o(t);return n},(b=se.selectors={cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace(B," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(h,e,t,g,v){var y="nth"!==h.slice(0,3),m="last"!==h.slice(-4),x="of-type"===e;return 1===g&&0===v?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=y!==m?"nextSibling":"previousSibling",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(y){while(l){a=e;while(a=a[l])if(x?a.nodeName.toLowerCase()===f:1===a.nodeType)return!1;u=l="only"===h&&!u&&"nextSibling"}return!0}if(u=[m?c.firstChild:c.lastChild],m&&p){d=(s=(r=(i=(o=(a=c)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1])&&r[2],a=s&&c.childNodes[s];while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if(1===a.nodeType&&++d&&a===e){i[h]=[k,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1]),!1===d)while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if((x?a.nodeName.toLowerCase()===f:1===a.nodeType)&&++d&&(p&&((i=(o=a[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[k,d]),a===e))break;return(d-=v)===g||d%g==0&&0<=d/g}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return a[S]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?le(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=P(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:le(function(e){var r=[],i=[],s=f(e.replace($,"$1"));return s[S]?le(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:le(function(t){return function(e){return 0<se(t,e).length}}),contains:le(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||o(e)).indexOf(t)}}),lang:le(function(n){return V.test(n||"")||se.error("unsupported lang: "+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=E?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===a},focus:function(e){return e===C.activeElement&&(!C.hasFocus||C.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ve(function(){return[0]}),last:ve(function(e,t){return[t-1]}),eq:ve(function(e,t,n){return[n<0?n+t:n]}),even:ve(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ve(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ve(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ve(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=he(e);function me(){}function xe(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&"parentNode"===c,p=r++;return e.first?function(e,t,n){while(e=e[u])if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,i,o,a=[k,p];if(n){while(e=e[u])if((1===e.nodeType||f)&&s(e,t,n))return!0}else while(e=e[u])if(1===e.nodeType||f)if(i=(o=e[S]||(e[S]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===k&&r[1]===p)return a[2]=r[2];if((i[c]=a)[2]=s(e,t,n))return!0}return!1}}function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Ce(d,h,g,v,y,e){return v&&!v[S]&&(v=Ce(v)),y&&!y[S]&&(y=Ce(y,e)),le(function(e,t,n,r){var i,o,a,s=[],u=[],l=t.length,c=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)se(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),f=!d||!e&&h?c:Te(c,s,d,n,r),p=g?y||(e?d:l||v)?[]:t:f;if(g&&g(f,p,n,r),v){i=Te(p,u),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a))}if(e){if(y||d){if(y){i=[],o=p.length;while(o--)(a=p[o])&&i.push(f[o]=a);y(null,p=[],i,r)}o=p.length;while(o--)(a=p[o])&&-1<(i=y?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),y?y(null,t,p,r):H.apply(t,p)})}function Ee(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=be(function(e){return e===i},a,!0),l=be(function(e){return-1<P(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!==w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[be(we(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[S]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return Ce(1<s&&we(c),1<s&&xe(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace($,"$1"),t,s<n&&Ee(e.slice(s,n)),n<r&&Ee(e=e.slice(n)),n<r&&xe(e))}c.push(t)}return we(c)}return me.prototype=b.filters=b.pseudos,b.setFilters=new me,h=se.tokenize=function(e,t){var n,r,i,o,a,s,u,l=x[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=_.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=z.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace($," ")}),a=a.slice(n.length)),b.filter)!(r=G[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?se.error(e):x(e,s).slice(0)},f=se.compile=function(e,t){var n,v,y,m,x,r,i=[],o=[],a=A[e+" "];if(!a){t||(t=h(e)),n=t.length;while(n--)(a=Ee(t[n]))[S]?i.push(a):o.push(a);(a=A(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=k+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t==C||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument==C||(T(o),n=!E);while(s=v[a++])if(s(o,t||C,n)){r.push(o);break}i&&(k=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=q.call(r));f=Te(f)}H.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&se.uniqueSort(r)}return i&&(k=h,w=p),c},m?le(r):r))).selector=e}return a},g=se.select=function(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&h(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&E&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(te,ne),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=G.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(te,ne),ee.test(o[0].type)&&ye(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return H.apply(n,r),n;break}}}return(l||f(e,c))(r,t,!E,n,!t||ee.test(e)&&ye(t.parentNode)||t),n},d.sortStable=S.split("").sort(D).join("")===S,d.detectDuplicates=!!l,T(),d.sortDetached=ce(function(e){return 1&e.compareDocumentPosition(C.createElement("fieldset"))}),ce(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||fe("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),d.attributes&&ce(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||fe("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute("disabled")})||fe(R,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(C);S.find=d,S.expr=d.selectors,S.expr[":"]=S.expr.pseudos,S.uniqueSort=S.unique=d.uniqueSort,S.text=d.getText,S.isXMLDoc=d.isXML,S.contains=d.contains,S.escapeSelector=d.escape;var h=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&S(e).is(n))break;r.push(e)}return r},T=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},k=S.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var N=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1<i.call(n,e)!==r}):S.filter(n,e,r)}S.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?S.find.matchesSelector(r,e)?[r]:[]:S.find.matches(e,S.grep(t,function(e){return 1===e.nodeType}))},S.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(S(e).filter(function(){for(t=0;t<r;t++)if(S.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)S.find(e,i[t],n);return 1<r?S.uniqueSort(n):n},filter:function(e){return this.pushStack(D(this,e||[],!1))},not:function(e){return this.pushStack(D(this,e||[],!0))},is:function(e){return!!D(this,"string"==typeof e&&k.test(e)?S(e):e||[],!1).length}});var j,q=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||j,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,j=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(S.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&S(e);if(!k.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&S.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?S.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?i.call(S(e),this[0]):i.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(S.uniqueSort(S.merge(this.get(),S(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),S.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return h(e,"parentNode")},parentsUntil:function(e,t,n){return h(e,"parentNode",n)},next:function(e){return O(e,"nextSibling")},prev:function(e){return O(e,"previousSibling")},nextAll:function(e){return h(e,"nextSibling")},prevAll:function(e){return h(e,"previousSibling")},nextUntil:function(e,t,n){return h(e,"nextSibling",n)},prevUntil:function(e,t,n){return h(e,"previousSibling",n)},siblings:function(e){return T((e.parentNode||{}).firstChild,e)},children:function(e){return T(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(A(e,"template")&&(e=e.content||e),S.merge([],e.childNodes))}},function(r,i){S.fn[r]=function(e,t){var n=S.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=S.filter(t,n)),1<this.length&&(H[r]||S.uniqueSort(n),L.test(r)&&n.reverse()),this.pushStack(n)}});var P=/[^\x20\t\r\n\f]+/g;function R(e){return e}function M(e){throw e}function I(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n):e&&m(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}S.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},S.each(e.match(P)||[],function(e,t){n[t]=!0}),n):S.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:"")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){S.each(e,function(e,t){m(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==w(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return S.each(arguments,function(e,t){var n;while(-1<(n=S.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<S.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},S.extend({Deferred:function(e){var o=[["notify","progress",S.Callbacks("memory"),S.Callbacks("memory"),2],["resolve","done",S.Callbacks("once memory"),S.Callbacks("once memory"),0,"resolved"],["reject","fail",S.Callbacks("once memory"),S.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},"catch":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return S.Deferred(function(r){S.each(o,function(e,t){var n=m(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&m(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,m(t)?s?t.call(e,l(u,o,R,s),l(u,o,M,s)):(u++,t.call(e,l(u,o,R,s),l(u,o,M,s),l(u,o,R,o.notifyWith))):(a!==R&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){S.Deferred.exceptionHook&&S.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==M&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(S.Deferred.getStackHook&&(t.stackTrace=S.Deferred.getStackHook()),C.setTimeout(t))}}return S.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:R,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:R)),o[2][3].add(l(0,e,m(n)?n:M))}).promise()},promise:function(e){return null!=e?S.extend(e,a):a}},s={};return S.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=s.call(arguments),o=S.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(I(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||m(i[t]&&i[t].then)))return o.then();while(t--)I(i[t],a(t),o.reject);return o.promise()}});var W=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;S.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&W.test(e.name)&&C.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},S.readyException=function(e){C.setTimeout(function(){throw e})};var F=S.Deferred();function B(){E.removeEventListener("DOMContentLoaded",B),C.removeEventListener("load",B),S.ready()}S.fn.ready=function(e){return F.then(e)["catch"](function(e){S.readyException(e)}),this},S.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--S.readyWait:S.isReady)||(S.isReady=!0)!==e&&0<--S.readyWait||F.resolveWith(E,[S])}}),S.ready.then=F.then,"complete"===E.readyState||"loading"!==E.readyState&&!E.documentElement.doScroll?C.setTimeout(S.ready):(E.addEventListener("DOMContentLoaded",B),C.addEventListener("load",B));var $=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===w(n))for(s in i=!0,n)$(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,m(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(S(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},_=/^-ms-/,z=/-([a-z])/g;function U(e,t){return t.toUpperCase()}function X(e){return e.replace(_,"ms-").replace(z,U)}var V=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function G(){this.expando=S.expando+G.uid++}G.uid=1,G.prototype={cache:function(e){var t=e[this.expando];return t||(t={},V(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[X(t)]=n;else for(r in t)i[X(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][X(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(X):(t=X(t))in r?[t]:t.match(P)||[]).length;while(n--)delete r[t[n]]}(void 0===t||S.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!S.isEmptyObject(t)}};var Y=new G,Q=new G,J=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,K=/[A-Z]/g;function Z(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(K,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:J.test(i)?JSON.parse(i):i)}catch(e){}Q.set(e,t,n)}else n=void 0;return n}S.extend({hasData:function(e){return Q.hasData(e)||Y.hasData(e)},data:function(e,t,n){return Q.access(e,t,n)},removeData:function(e,t){Q.remove(e,t)},_data:function(e,t,n){return Y.access(e,t,n)},_removeData:function(e,t){Y.remove(e,t)}}),S.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=Q.get(o),1===o.nodeType&&!Y.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=X(r.slice(5)),Z(o,r,i[r]));Y.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){Q.set(this,n)}):$(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=Q.get(o,n))?t:void 0!==(t=Z(o,n))?t:void 0;this.each(function(){Q.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){Q.remove(this,e)})}}),S.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Y.get(e,t),n&&(!r||Array.isArray(n)?r=Y.access(e,t,S.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=S.queue(e,t),r=n.length,i=n.shift(),o=S._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){S.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Y.get(e,n)||Y.access(e,n,{empty:S.Callbacks("once memory").add(function(){Y.remove(e,[t+"queue",n])})})}}),S.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?S.queue(this[0],t):void 0===n?this:this.each(function(){var e=S.queue(this,t,n);S._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&S.dequeue(this,t)})},dequeue:function(e){return this.each(function(){S.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=S.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=Y.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var ee=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,te=new RegExp("^(?:([+-])=|)("+ee+")([a-z%]*)$","i"),ne=["Top","Right","Bottom","Left"],re=E.documentElement,ie=function(e){return S.contains(e.ownerDocument,e)},oe={composed:!0};re.getRootNode&&(ie=function(e){return S.contains(e.ownerDocument,e)||e.getRootNode(oe)===e.ownerDocument});var ae=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&ie(e)&&"none"===S.css(e,"display")};function se(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return S.css(e,t,"")},u=s(),l=n&&n[3]||(S.cssNumber[t]?"":"px"),c=e.nodeType&&(S.cssNumber[t]||"px"!==l&&+u)&&te.exec(S.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)S.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,S.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ue={};function le(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=Y.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&ae(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ue[s])||(o=a.body.appendChild(a.createElement(s)),u=S.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ue[s]=u)))):"none"!==n&&(l[c]="none",Y.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}S.fn.extend({show:function(){return le(this,!0)},hide:function(){return le(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?S(this).show():S(this).hide()})}});var ce,fe,pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="<textarea>x</textarea>",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="<option></option>",y.option=!!ce.lastChild;var ge={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n<r;n++)Y.set(e[n],"globalEval",!t||Y.get(t[n],"globalEval"))}ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td,y.option||(ge.optgroup=ge.option=[1,"<select multiple='multiple'>","</select>"]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===w(o))S.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+S.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;S.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<S.inArray(o,r))i&&i.push(o);else if(l=ie(o),a=ve(f.appendChild(o),"script"),l&&ye(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}var be=/^key/,we=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Te=/^([^.]*)(?:\.(.+)|)/;function Ce(){return!0}function Ee(){return!1}function Se(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function ke(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)ke(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Ee;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return S().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=S.guid++)),e.each(function(){S.event.add(this,t,i,r,n)})}function Ae(e,i,o){o?(Y.set(e,i,!1),S.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Y.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(S.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Y.set(this,i,r),t=o(this,i),this[i](),r!==(n=Y.get(this,i))||t?Y.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Y.set(this,i,{value:S.event.trigger(S.extend(r[0],S.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Y.get(e,i)&&S.event.add(e,i,Ce)}S.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.get(t);if(V(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&S.find.matchesSelector(re,i),n.guid||(n.guid=S.guid++),(u=v.events)||(u=v.events=Object.create(null)),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof S&&S.event.triggered!==e.type?S.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(P)||[""]).length;while(l--)d=g=(s=Te.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=S.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=S.event.special[d]||{},c=S.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&S.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),S.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.hasData(e)&&Y.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(P)||[""]).length;while(l--)if(d=g=(s=Te.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=S.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||S.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)S.event.remove(e,d+t[l],n,r,!0);S.isEmptyObject(u)&&Y.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),u=S.event.fix(e),l=(Y.get(this,"events")||Object.create(null))[u.type]||[],c=S.event.special[u.type]||{};for(s[0]=u,t=1;t<arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){a=S.event.handlers.call(this,u,l),t=0;while((i=a[t++])&&!u.isPropagationStopped()){u.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!u.isImmediatePropagationStopped())u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((S.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?-1<S(i,this).index(l):S.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(S.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[S.expando]?e:new S.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Ae(t,"click",Ce),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Ae(t,"click"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&A(t,"input")&&Y.get(t,"click")||A(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},S.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},S.Event=function(e,t){if(!(this instanceof S.Event))return new S.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?Ce:Ee,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&S.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[S.expando]=!0},S.Event.prototype={constructor:S.Event,isDefaultPrevented:Ee,isPropagationStopped:Ee,isImmediatePropagationStopped:Ee,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=Ce,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=Ce,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=Ce,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},S.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(e){var t=e.button;return null==e.which&&be.test(e.type)?null!=e.charCode?e.charCode:e.keyCode:!e.which&&void 0!==t&&we.test(e.type)?1&t?1:2&t?3:4&t?2:0:e.which}},S.event.addProp),S.each({focus:"focusin",blur:"focusout"},function(e,t){S.event.special[e]={setup:function(){return Ae(this,e,Se),!1},trigger:function(){return Ae(this,e),!0},delegateType:t}}),S.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){S.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||S.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),S.fn.extend({on:function(e,t,n,r){return ke(this,e,t,n,r)},one:function(e,t,n,r){return ke(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,S(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=Ee),this.each(function(){S.event.remove(this,e,n,t)})}});var Ne=/<script|<style|<link/i,De=/checked\s*(?:[^=]|=\s*.checked.)/i,je=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function qe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function Le(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function He(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Oe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n<r;n++)S.event.add(t,i,s[i][n]);Q.hasData(e)&&(o=Q.access(e),a=S.extend({},o),Q.set(t,a))}}function Pe(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&"string"==typeof d&&!y.checkClone&&De.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),Pe(t,r,i,o)});if(f&&(t=(e=xe(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=S.map(ve(e,"script"),Le)).length;c<f;c++)u=e,c!==p&&(u=S.clone(u,!0,!0),s&&S.merge(a,ve(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,S.map(a,He),c=0;c<s;c++)u=a[c],he.test(u.type||"")&&!Y.access(u,"globalEval")&&S.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?S._evalUrl&&!u.noModule&&S._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},l):b(u.textContent.replace(je,""),u,l))}return n}function Re(e,t,n){for(var r,i=t?S.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||S.cleanData(ve(r)),r.parentNode&&(n&&ie(r)&&ye(ve(r,"script")),r.parentNode.removeChild(r));return e}S.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=ie(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||S.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ve(e),a=a||ve(c),r=0,i=o.length;r<i;r++)Oe(o[r],a[r]);else Oe(e,c);return 0<(a=ve(c,"script")).length&&ye(a,!f&&ve(e,"script")),c},cleanData:function(e){for(var t,n,r,i=S.event.special,o=0;void 0!==(n=e[o]);o++)if(V(n)){if(t=n[Y.expando]){if(t.events)for(r in t.events)i[r]?S.event.remove(n,r):S.removeEvent(n,r,t.handle);n[Y.expando]=void 0}n[Q.expando]&&(n[Q.expando]=void 0)}}}),S.fn.extend({detach:function(e){return Re(this,e,!0)},remove:function(e){return Re(this,e)},text:function(e){return $(this,function(e){return void 0===e?S.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Pe(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||qe(this,e).appendChild(e)})},prepend:function(){return Pe(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=qe(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Pe(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Pe(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(S.cleanData(ve(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return S.clone(this,e,t)})},html:function(e){return $(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ne.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=S.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(S.cleanData(ve(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return Pe(this,arguments,function(e){var t=this.parentNode;S.inArray(this,n)<0&&(S.cleanData(ve(this)),t&&t.replaceChild(e,this))},n)}}),S.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){S.fn[e]=function(e){for(var t,n=[],r=S(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),S(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var Me=new RegExp("^("+ee+")(?!px)[a-z%]+$","i"),Ie=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},We=function(e,t,n){var r,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.call(e),t)e.style[i]=o[i];return r},Fe=new RegExp(ne.join("|"),"i");function Be(e,t,n){var r,i,o,a,s=e.style;return(n=n||Ie(e))&&(""!==(a=n.getPropertyValue(t)||n[t])||ie(e)||(a=S.style(e,t)),!y.pixelBoxStyles()&&Me.test(a)&&Fe.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+"":a}function $e(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",l.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",re.appendChild(u).appendChild(l);var e=C.getComputedStyle(l);n="1%"!==e.top,s=12===t(e.marginLeft),l.style.right="60%",o=36===t(e.right),r=36===t(e.width),l.style.position="absolute",i=12===t(l.offsetWidth/3),re.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=E.createElement("div"),l=E.createElement("div");l.style&&(l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",y.clearCloneStyle="content-box"===l.style.backgroundClip,S.extend(y,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,r;return null==a&&(e=E.createElement("table"),t=E.createElement("tr"),n=E.createElement("div"),e.style.cssText="position:absolute;left:-11111px",t.style.height="1px",n.style.height="9px",re.appendChild(e).appendChild(t).appendChild(n),r=C.getComputedStyle(t),a=3<parseInt(r.height),re.removeChild(e)),a}}))}();var _e=["Webkit","Moz","ms"],ze=E.createElement("div").style,Ue={};function Xe(e){var t=S.cssProps[e]||Ue[e];return t||(e in ze?e:Ue[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=_e.length;while(n--)if((e=_e[n]+t)in ze)return e}(e)||e)}var Ve=/^(none|table(?!-c[ea]).+)/,Ge=/^--/,Ye={position:"absolute",visibility:"hidden",display:"block"},Qe={letterSpacing:"0",fontWeight:"400"};function Je(e,t,n){var r=te.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function Ke(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=S.css(e,n+ne[a],!0,i)),r?("content"===n&&(u-=S.css(e,"padding"+ne[a],!0,i)),"margin"!==n&&(u-=S.css(e,"border"+ne[a]+"Width",!0,i))):(u+=S.css(e,"padding"+ne[a],!0,i),"padding"!==n?u+=S.css(e,"border"+ne[a]+"Width",!0,i):s+=S.css(e,"border"+ne[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function Ze(e,t,n){var r=Ie(e),i=(!y.boxSizingReliable()||n)&&"border-box"===S.css(e,"boxSizing",!1,r),o=i,a=Be(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(Me.test(a)){if(!n)return a;a="auto"}return(!y.boxSizingReliable()&&i||!y.reliableTrDimensions()&&A(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===S.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===S.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+Ke(e,t,n||(i?"border":"content"),o,r,a)+"px"}function et(e,t,n,r,i){return new et.prototype.init(e,t,n,r,i)}S.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Be(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=X(t),u=Ge.test(t),l=e.style;if(u||(t=Xe(s)),a=S.cssHooks[t]||S.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=te.exec(n))&&i[1]&&(n=se(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(S.cssNumber[s]?"":"px")),y.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=X(t);return Ge.test(t)||(t=Xe(s)),(a=S.cssHooks[t]||S.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Be(e,t,r)),"normal"===i&&t in Qe&&(i=Qe[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),S.each(["height","width"],function(e,u){S.cssHooks[u]={get:function(e,t,n){if(t)return!Ve.test(S.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?Ze(e,u,n):We(e,Ye,function(){return Ze(e,u,n)})},set:function(e,t,n){var r,i=Ie(e),o=!y.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===S.css(e,"boxSizing",!1,i),s=n?Ke(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-Ke(e,u,"border",!1,i)-.5)),s&&(r=te.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=S.css(e,u)),Je(0,t,s)}}}),S.cssHooks.marginLeft=$e(y.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Be(e,"marginLeft"))||e.getBoundingClientRect().left-We(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),S.each({margin:"",padding:"",border:"Width"},function(i,o){S.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+ne[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(S.cssHooks[i+o].set=Je)}),S.fn.extend({css:function(e,t){return $(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Ie(e),i=t.length;a<i;a++)o[t[a]]=S.css(e,t[a],!1,r);return o}return void 0!==n?S.style(e,t,n):S.css(e,t)},e,t,1<arguments.length)}}),((S.Tween=et).prototype={constructor:et,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||S.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(S.cssNumber[n]?"":"px")},cur:function(){var e=et.propHooks[this.prop];return e&&e.get?e.get(this):et.propHooks._default.get(this)},run:function(e){var t,n=et.propHooks[this.prop];return this.options.duration?this.pos=t=S.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):et.propHooks._default.set(this),this}}).init.prototype=et.prototype,(et.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=S.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){S.fx.step[e.prop]?S.fx.step[e.prop](e):1!==e.elem.nodeType||!S.cssHooks[e.prop]&&null==e.elem.style[Xe(e.prop)]?e.elem[e.prop]=e.now:S.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=et.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},S.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},S.fx=et.prototype.init,S.fx.step={};var tt,nt,rt,it,ot=/^(?:toggle|show|hide)$/,at=/queueHooks$/;function st(){nt&&(!1===E.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(st):C.setTimeout(st,S.fx.interval),S.fx.tick())}function ut(){return C.setTimeout(function(){tt=void 0}),tt=Date.now()}function lt(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=ne[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function ct(e,t,n){for(var r,i=(ft.tweeners[t]||[]).concat(ft.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function ft(o,e,t){var n,a,r=0,i=ft.prefilters.length,s=S.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=tt||ut(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:S.extend({},e),opts:S.extend(!0,{specialEasing:{},easing:S.easing._default},t),originalProperties:e,originalOptions:t,startTime:tt||ut(),duration:t.duration,tweens:[],createTween:function(e,t){var n=S.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=X(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=S.cssHooks[r])&&"expand"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=ft.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(S._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return S.map(c,ct,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),S.fx.timer(S.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}S.Animation=S.extend(ft,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return se(n.elem,e,te.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=["*"]):e=e.match(P);for(var n,r=0,i=e.length;r<i;r++)n=e[r],ft.tweeners[n]=ft.tweeners[n]||[],ft.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),v=Y.get(e,"fxshow");for(r in n.queue||(null==(a=S._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,S.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],ot.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||S.style(e,r)}if((u=!S.isEmptyObject(t))||!S.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=Y.get(e,"display")),"none"===(c=S.css(e,"display"))&&(l?c=l:(le([e],!0),l=e.style.display||l,c=S.css(e,"display"),le([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===S.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?"hidden"in v&&(g=v.hidden):v=Y.access(e,"fxshow",{display:l}),o&&(v.hidden=!g),g&&le([e],!0),p.done(function(){for(r in g||le([e]),Y.remove(e,"fxshow"),d)S.style(e,r,d[r])})),u=ct(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?ft.prefilters.unshift(e):ft.prefilters.push(e)}}),S.speed=function(e,t,n){var r=e&&"object"==typeof e?S.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return S.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in S.fx.speeds?r.duration=S.fx.speeds[r.duration]:r.duration=S.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&S.dequeue(this,r.queue)},r},S.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=S.isEmptyObject(t),o=S.speed(e,n,r),a=function(){var e=ft(this,S.extend({},t),o);(i||Y.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=S.timers,r=Y.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&at.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||S.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=Y.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=S.timers,o=n?n.length:0;for(t.finish=!0,S.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),S.each(["toggle","show","hide"],function(e,r){var i=S.fn[r];S.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(lt(r,!0),e,t,n)}}),S.each({slideDown:lt("show"),slideUp:lt("hide"),slideToggle:lt("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){S.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),S.timers=[],S.fx.tick=function(){var e,t=0,n=S.timers;for(tt=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||S.fx.stop(),tt=void 0},S.fx.timer=function(e){S.timers.push(e),S.fx.start()},S.fx.interval=13,S.fx.start=function(){nt||(nt=!0,st())},S.fx.stop=function(){nt=null},S.fx.speeds={slow:600,fast:200,_default:400},S.fn.delay=function(r,e){return r=S.fx&&S.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},rt=E.createElement("input"),it=E.createElement("select").appendChild(E.createElement("option")),rt.type="checkbox",y.checkOn=""!==rt.value,y.optSelected=it.selected,(rt=E.createElement("input")).value="t",rt.type="radio",y.radioValue="t"===rt.value;var pt,dt=S.expr.attrHandle;S.fn.extend({attr:function(e,t){return $(this,S.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){S.removeAttr(this,e)})}}),S.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?S.prop(e,t,n):(1===o&&S.isXMLDoc(e)||(i=S.attrHooks[t.toLowerCase()]||(S.expr.match.bool.test(t)?pt:void 0)),void 0!==n?null===n?void S.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=S.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!y.radioValue&&"radio"===t&&A(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(P);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),pt={set:function(e,t,n){return!1===t?S.removeAttr(e,n):e.setAttribute(n,n),n}},S.each(S.expr.match.bool.source.match(/\w+/g),function(e,t){var a=dt[t]||S.find.attr;dt[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=dt[o],dt[o]=r,r=null!=a(e,t,n)?o:null,dt[o]=i),r}});var ht=/^(?:input|select|textarea|button)$/i,gt=/^(?:a|area)$/i;function vt(e){return(e.match(P)||[]).join(" ")}function yt(e){return e.getAttribute&&e.getAttribute("class")||""}function mt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(P)||[]}S.fn.extend({prop:function(e,t){return $(this,S.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[S.propFix[e]||e]})}}),S.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&S.isXMLDoc(e)||(t=S.propFix[t]||t,i=S.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=S.find.attr(e,"tabindex");return t?parseInt(t,10):ht.test(e.nodeName)||gt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),y.optSelected||(S.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),S.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){S.propFix[this.toLowerCase()]=this}),S.fn.extend({addClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).addClass(t.call(this,e,yt(this)))});if((e=mt(t)).length)while(n=this[u++])if(i=yt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=e[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},removeClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).removeClass(t.call(this,e,yt(this)))});if(!arguments.length)return this.attr("class","");if((e=mt(t)).length)while(n=this[u++])if(i=yt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=e[a++])while(-1<r.indexOf(" "+o+" "))r=r.replace(" "+o+" "," ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(i,t){var o=typeof i,a="string"===o||Array.isArray(i);return"boolean"==typeof t&&a?t?this.addClass(i):this.removeClass(i):m(i)?this.each(function(e){S(this).toggleClass(i.call(this,e,yt(this),t),t)}):this.each(function(){var e,t,n,r;if(a){t=0,n=S(this),r=mt(i);while(e=r[t++])n.hasClass(e)?n.removeClass(e):n.addClass(e)}else void 0!==i&&"boolean"!==o||((e=yt(this))&&Y.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||!1===i?"":Y.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+vt(yt(n))+" ").indexOf(t))return!0;return!1}});var xt=/\r/g;S.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,S(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=S.map(t,function(e){return null==e?"":e+""})),(r=S.valHooks[this.type]||S.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=S.valHooks[t.type]||S.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(xt,""):null==e?"":e:void 0}}),S.extend({valHooks:{option:{get:function(e){var t=S.find.attr(e,"value");return null!=t?t:vt(S.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!A(n.parentNode,"optgroup"))){if(t=S(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=S.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<S.inArray(S.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),S.each(["radio","checkbox"],function(){S.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<S.inArray(S(e).val(),t)}},y.checkOn||(S.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),y.focusin="onfocusin"in C;var bt=/^(?:focusinfocus|focusoutblur)$/,wt=function(e){e.stopPropagation()};S.extend(S.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||E],d=v.call(e,"type")?e.type:e,h=v.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||E,3!==n.nodeType&&8!==n.nodeType&&!bt.test(d+S.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[S.expando]?e:new S.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:S.makeArray(t,[e]),c=S.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,bt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||E)&&p.push(a.defaultView||a.parentWindow||C)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(Y.get(o,"events")||Object.create(null))[e.type]&&Y.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&V(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!V(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),S.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,wt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,wt),S.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=S.extend(new S.Event,n,{type:e,isSimulated:!0});S.event.trigger(r,null,t)}}),S.fn.extend({trigger:function(e,t){return this.each(function(){S.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return S.event.trigger(e,t,n,!0)}}),y.focusin||S.each({focus:"focusin",blur:"focusout"},function(n,r){var i=function(e){S.event.simulate(r,e.target,S.event.fix(e))};S.event.special[r]={setup:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r);t||e.addEventListener(n,i,!0),Y.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r)-1;t?Y.access(e,r,t):(e.removeEventListener(n,i,!0),Y.remove(e,r))}}});var Tt=C.location,Ct={guid:Date.now()},Et=/\?/;S.parseXML=function(e){var t;if(!e||"string"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,"text/xml")}catch(e){t=void 0}return t&&!t.getElementsByTagName("parsererror").length||S.error("Invalid XML: "+e),t};var St=/\[\]$/,kt=/\r?\n/g,At=/^(?:submit|button|image|reset|file)$/i,Nt=/^(?:input|select|textarea|keygen)/i;function Dt(n,e,r,i){var t;if(Array.isArray(e))S.each(e,function(e,t){r||St.test(n)?i(n,t):Dt(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==w(e))i(n,e);else for(t in e)Dt(n+"["+t+"]",e[t],r,i)}S.param=function(e,t){var n,r=[],i=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!S.isPlainObject(e))S.each(e,function(){i(this.name,this.value)});else for(n in e)Dt(n,e[n],t,i);return r.join("&")},S.fn.extend({serialize:function(){return S.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=S.prop(this,"elements");return e?S.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!S(this).is(":disabled")&&Nt.test(this.nodeName)&&!At.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=S(this).val();return null==n?null:Array.isArray(n)?S.map(n,function(e){return{name:t.name,value:e.replace(kt,"\r\n")}}):{name:t.name,value:n.replace(kt,"\r\n")}}).get()}});var jt=/%20/g,qt=/#.*$/,Lt=/([?&])_=[^&]*/,Ht=/^(.*?):[ \t]*([^\r\n]*)$/gm,Ot=/^(?:GET|HEAD)$/,Pt=/^\/\//,Rt={},Mt={},It="*/".concat("*"),Wt=E.createElement("a");function Ft(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(P)||[];if(m(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function Bt(t,i,o,a){var s={},u=t===Mt;function l(e){var r;return s[e]=!0,S.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function $t(e,t){var n,r,i=S.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&S.extend(!0,e,r),e}Wt.href=Tt.href,S.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Tt.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Tt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":It,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":S.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?$t($t(e,S.ajaxSettings),t):$t(S.ajaxSettings,e)},ajaxPrefilter:Ft(Rt),ajaxTransport:Ft(Mt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=S.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?S(y):S.event,x=S.Deferred(),b=S.Callbacks("once memory"),w=v.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=Ht.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||Tt.href)+"").replace(Pt,Tt.protocol+"//"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||"*").toLowerCase().match(P)||[""],null==v.crossDomain){r=E.createElement("a");try{r.href=v.url,r.href=r.href,v.crossDomain=Wt.protocol+"//"+Wt.host!=r.protocol+"//"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&"string"!=typeof v.data&&(v.data=S.param(v.data,v.traditional)),Bt(Rt,v,t,T),h)return T;for(i in(g=S.event&&v.global)&&0==S.active++&&S.event.trigger("ajaxStart"),v.type=v.type.toUpperCase(),v.hasContent=!Ot.test(v.type),f=v.url.replace(qt,""),v.hasContent?v.data&&v.processData&&0===(v.contentType||"").indexOf("application/x-www-form-urlencoded")&&(v.data=v.data.replace(jt,"+")):(o=v.url.slice(f.length),v.data&&(v.processData||"string"==typeof v.data)&&(f+=(Et.test(f)?"&":"?")+v.data,delete v.data),!1===v.cache&&(f=f.replace(Lt,"$1"),o=(Et.test(f)?"&":"?")+"_="+Ct.guid+++o),v.url=f+o),v.ifModified&&(S.lastModified[f]&&T.setRequestHeader("If-Modified-Since",S.lastModified[f]),S.etag[f]&&T.setRequestHeader("If-None-Match",S.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader("Content-Type",v.contentType),T.setRequestHeader("Accept",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+("*"!==v.dataTypes[0]?", "+It+"; q=0.01":""):v.accepts["*"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u="abort",b.add(v.complete),T.done(v.success),T.fail(v.error),c=Bt(Mt,v,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,v]),h)return T;v.async&&0<v.timeout&&(d=C.setTimeout(function(){T.abort("timeout")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),!i&&-1<S.inArray("script",v.dataTypes)&&(v.converters["text script"]=function(){}),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(S.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(S.etag[f]=u)),204===e||"HEAD"===v.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger("ajaxComplete",[T,v]),--S.active||S.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return S.get(e,t,n,"json")},getScript:function(e,t){return S.get(e,void 0,t,"script")}}),S.each(["get","post"],function(e,i){S[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),S.ajax(S.extend({url:e,type:i,dataType:r,data:t,success:n},S.isPlainObject(e)&&e))}}),S.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),S._evalUrl=function(e,t,n){return S.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){S.globalEval(e,t,n)}})},S.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=S(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){S(this).wrapInner(n.call(this,e))}):this.each(function(){var e=S(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){S(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){S(this).replaceWith(this.childNodes)}),this}}),S.expr.pseudos.hidden=function(e){return!S.expr.pseudos.visible(e)},S.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},S.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var _t={0:200,1223:204},zt=S.ajaxSettings.xhr();y.cors=!!zt&&"withCredentials"in zt,y.ajax=zt=!!zt,S.ajaxTransport(function(i){var o,a;if(y.cors||zt&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(_t[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),S.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),S.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return S.globalEval(e),e}}}),S.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),S.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=S("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=vt(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&S.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?S("<div>").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):("number"==typeof f.top&&(f.top+="px"),"number"==typeof f.left&&(f.left+="px"),c.css(f))}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=$e(y.pixelPosition,function(e,t){if(t)return t=Be(e,n),Me.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var Gt=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;S.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||S.guid++,i},S.holdReady=function(e){e?S.readyWait++:S.ready(!0)},S.isArray=Array.isArray,S.parseJSON=JSON.parse,S.nodeName=A,S.isFunction=m,S.isWindow=x,S.camelCase=X,S.type=w,S.now=Date.now,S.isNumeric=function(e){var t=S.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},S.trim=function(e){return null==e?"":(e+"").replace(Gt,"")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return S});var Yt=C.jQuery,Qt=C.$;return S.noConflict=function(e){return C.$===S&&(C.$=Qt),e&&C.jQuery===S&&(C.jQuery=Yt),S},"undefined"==typeof e&&(C.jQuery=C.$=S),S}); /*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ !function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}S.fn=S.prototype={jquery:f,constructor:S,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=S.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return S.each(this,e)},map:function(n){return this.pushStack(S.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(S.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(S.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},S.extend=S.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(S.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||S.isPlainObject(n)?n:{},i=!1,a[t]=S.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},S.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==o.call(e))&&(!(t=r(e))||"function"==typeof(n=v.call(t,"constructor")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){b(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(p(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},makeArray:function(e,t){var n=t||[];return null!=e&&(p(Object(e))?S.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(p(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:y}),"function"==typeof Symbol&&(S.fn[Symbol.iterator]=t[Symbol.iterator]),S.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var d=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,E,v,s,c,y,S="sizzle"+1*new Date,p=n.document,k=0,r=0,m=ue(),x=ue(),A=ue(),N=ue(),j=function(e,t){return e===t&&(l=!0),0},D={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",I="(?:\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",W="\\["+M+"*("+I+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+I+"))|)"+M+"*\\]",F=":("+I+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",B=new RegExp(M+"+","g"),$=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=new RegExp("^"+M+"*,"+M+"*"),z=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="<a id='"+S+"'></a><select id='"+S+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0<se(t,C,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!=C&&T(e),y(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!=C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&D.call(b.attrHandle,t.toLowerCase())?n(e,t,!E):void 0;return void 0!==r?r:d.attributes||!E?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+"").replace(re,ie)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,n=[],r=0,i=0;if(l=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(j),l){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return u=null,e},o=se.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else while(t=e[r++])n+=o(t);return n},(b=se.selectors={cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace(B," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(h,e,t,g,v){var y="nth"!==h.slice(0,3),m="last"!==h.slice(-4),x="of-type"===e;return 1===g&&0===v?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=y!==m?"nextSibling":"previousSibling",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(y){while(l){a=e;while(a=a[l])if(x?a.nodeName.toLowerCase()===f:1===a.nodeType)return!1;u=l="only"===h&&!u&&"nextSibling"}return!0}if(u=[m?c.firstChild:c.lastChild],m&&p){d=(s=(r=(i=(o=(a=c)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1])&&r[2],a=s&&c.childNodes[s];while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if(1===a.nodeType&&++d&&a===e){i[h]=[k,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1]),!1===d)while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if((x?a.nodeName.toLowerCase()===f:1===a.nodeType)&&++d&&(p&&((i=(o=a[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[k,d]),a===e))break;return(d-=v)===g||d%g==0&&0<=d/g}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return a[S]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?le(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=P(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:le(function(e){var r=[],i=[],s=f(e.replace($,"$1"));return s[S]?le(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:le(function(t){return function(e){return 0<se(t,e).length}}),contains:le(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||o(e)).indexOf(t)}}),lang:le(function(n){return V.test(n||"")||se.error("unsupported lang: "+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=E?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===a},focus:function(e){return e===C.activeElement&&(!C.hasFocus||C.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ve(function(){return[0]}),last:ve(function(e,t){return[t-1]}),eq:ve(function(e,t,n){return[n<0?n+t:n]}),even:ve(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ve(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ve(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ve(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=he(e);function me(){}function xe(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&"parentNode"===c,p=r++;return e.first?function(e,t,n){while(e=e[u])if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,i,o,a=[k,p];if(n){while(e=e[u])if((1===e.nodeType||f)&&s(e,t,n))return!0}else while(e=e[u])if(1===e.nodeType||f)if(i=(o=e[S]||(e[S]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===k&&r[1]===p)return a[2]=r[2];if((i[c]=a)[2]=s(e,t,n))return!0}return!1}}function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Ce(d,h,g,v,y,e){return v&&!v[S]&&(v=Ce(v)),y&&!y[S]&&(y=Ce(y,e)),le(function(e,t,n,r){var i,o,a,s=[],u=[],l=t.length,c=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)se(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),f=!d||!e&&h?c:Te(c,s,d,n,r),p=g?y||(e?d:l||v)?[]:t:f;if(g&&g(f,p,n,r),v){i=Te(p,u),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a))}if(e){if(y||d){if(y){i=[],o=p.length;while(o--)(a=p[o])&&i.push(f[o]=a);y(null,p=[],i,r)}o=p.length;while(o--)(a=p[o])&&-1<(i=y?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),y?y(null,t,p,r):H.apply(t,p)})}function Ee(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=be(function(e){return e===i},a,!0),l=be(function(e){return-1<P(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!==w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[be(we(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[S]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return Ce(1<s&&we(c),1<s&&xe(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace($,"$1"),t,s<n&&Ee(e.slice(s,n)),n<r&&Ee(e=e.slice(n)),n<r&&xe(e))}c.push(t)}return we(c)}return me.prototype=b.filters=b.pseudos,b.setFilters=new me,h=se.tokenize=function(e,t){var n,r,i,o,a,s,u,l=x[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=_.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=z.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace($," ")}),a=a.slice(n.length)),b.filter)!(r=G[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?se.error(e):x(e,s).slice(0)},f=se.compile=function(e,t){var n,v,y,m,x,r,i=[],o=[],a=A[e+" "];if(!a){t||(t=h(e)),n=t.length;while(n--)(a=Ee(t[n]))[S]?i.push(a):o.push(a);(a=A(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=k+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t==C||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument==C||(T(o),n=!E);while(s=v[a++])if(s(o,t||C,n)){r.push(o);break}i&&(k=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=q.call(r));f=Te(f)}H.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&se.uniqueSort(r)}return i&&(k=h,w=p),c},m?le(r):r))).selector=e}return a},g=se.select=function(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&h(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&E&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(te,ne),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=G.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(te,ne),ee.test(o[0].type)&&ye(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return H.apply(n,r),n;break}}}return(l||f(e,c))(r,t,!E,n,!t||ee.test(e)&&ye(t.parentNode)||t),n},d.sortStable=S.split("").sort(j).join("")===S,d.detectDuplicates=!!l,T(),d.sortDetached=ce(function(e){return 1&e.compareDocumentPosition(C.createElement("fieldset"))}),ce(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||fe("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),d.attributes&&ce(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||fe("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute("disabled")})||fe(R,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(C);S.find=d,S.expr=d.selectors,S.expr[":"]=S.expr.pseudos,S.uniqueSort=S.unique=d.uniqueSort,S.text=d.getText,S.isXMLDoc=d.isXML,S.contains=d.contains,S.escapeSelector=d.escape;var h=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&S(e).is(n))break;r.push(e)}return r},T=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},k=S.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var N=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1<i.call(n,e)!==r}):S.filter(n,e,r)}S.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?S.find.matchesSelector(r,e)?[r]:[]:S.find.matches(e,S.grep(t,function(e){return 1===e.nodeType}))},S.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(S(e).filter(function(){for(t=0;t<r;t++)if(S.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)S.find(e,i[t],n);return 1<r?S.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&k.test(e)?S(e):e||[],!1).length}});var D,q=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(S.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&S(e);if(!k.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&S.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?S.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?i.call(S(e),this[0]):i.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(S.uniqueSort(S.merge(this.get(),S(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),S.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return h(e,"parentNode")},parentsUntil:function(e,t,n){return h(e,"parentNode",n)},next:function(e){return O(e,"nextSibling")},prev:function(e){return O(e,"previousSibling")},nextAll:function(e){return h(e,"nextSibling")},prevAll:function(e){return h(e,"previousSibling")},nextUntil:function(e,t,n){return h(e,"nextSibling",n)},prevUntil:function(e,t,n){return h(e,"previousSibling",n)},siblings:function(e){return T((e.parentNode||{}).firstChild,e)},children:function(e){return T(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(A(e,"template")&&(e=e.content||e),S.merge([],e.childNodes))}},function(r,i){S.fn[r]=function(e,t){var n=S.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=S.filter(t,n)),1<this.length&&(H[r]||S.uniqueSort(n),L.test(r)&&n.reverse()),this.pushStack(n)}});var P=/[^\x20\t\r\n\f]+/g;function R(e){return e}function M(e){throw e}function I(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n):e&&m(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}S.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},S.each(e.match(P)||[],function(e,t){n[t]=!0}),n):S.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:"")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){S.each(e,function(e,t){m(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==w(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return S.each(arguments,function(e,t){var n;while(-1<(n=S.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<S.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},S.extend({Deferred:function(e){var o=[["notify","progress",S.Callbacks("memory"),S.Callbacks("memory"),2],["resolve","done",S.Callbacks("once memory"),S.Callbacks("once memory"),0,"resolved"],["reject","fail",S.Callbacks("once memory"),S.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},"catch":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return S.Deferred(function(r){S.each(o,function(e,t){var n=m(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&m(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,m(t)?s?t.call(e,l(u,o,R,s),l(u,o,M,s)):(u++,t.call(e,l(u,o,R,s),l(u,o,M,s),l(u,o,R,o.notifyWith))):(a!==R&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){S.Deferred.exceptionHook&&S.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==M&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(S.Deferred.getStackHook&&(t.stackTrace=S.Deferred.getStackHook()),C.setTimeout(t))}}return S.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:R,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:R)),o[2][3].add(l(0,e,m(n)?n:M))}).promise()},promise:function(e){return null!=e?S.extend(e,a):a}},s={};return S.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=s.call(arguments),o=S.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(I(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||m(i[t]&&i[t].then)))return o.then();while(t--)I(i[t],a(t),o.reject);return o.promise()}});var W=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;S.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&W.test(e.name)&&C.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},S.readyException=function(e){C.setTimeout(function(){throw e})};var F=S.Deferred();function B(){E.removeEventListener("DOMContentLoaded",B),C.removeEventListener("load",B),S.ready()}S.fn.ready=function(e){return F.then(e)["catch"](function(e){S.readyException(e)}),this},S.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--S.readyWait:S.isReady)||(S.isReady=!0)!==e&&0<--S.readyWait||F.resolveWith(E,[S])}}),S.ready.then=F.then,"complete"===E.readyState||"loading"!==E.readyState&&!E.documentElement.doScroll?C.setTimeout(S.ready):(E.addEventListener("DOMContentLoaded",B),C.addEventListener("load",B));var $=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===w(n))for(s in i=!0,n)$(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,m(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(S(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},_=/^-ms-/,z=/-([a-z])/g;function U(e,t){return t.toUpperCase()}function X(e){return e.replace(_,"ms-").replace(z,U)}var V=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function G(){this.expando=S.expando+G.uid++}G.uid=1,G.prototype={cache:function(e){var t=e[this.expando];return t||(t={},V(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[X(t)]=n;else for(r in t)i[X(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][X(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(X):(t=X(t))in r?[t]:t.match(P)||[]).length;while(n--)delete r[t[n]]}(void 0===t||S.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!S.isEmptyObject(t)}};var Y=new G,Q=new G,J=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,K=/[A-Z]/g;function Z(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(K,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:J.test(i)?JSON.parse(i):i)}catch(e){}Q.set(e,t,n)}else n=void 0;return n}S.extend({hasData:function(e){return Q.hasData(e)||Y.hasData(e)},data:function(e,t,n){return Q.access(e,t,n)},removeData:function(e,t){Q.remove(e,t)},_data:function(e,t,n){return Y.access(e,t,n)},_removeData:function(e,t){Y.remove(e,t)}}),S.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=Q.get(o),1===o.nodeType&&!Y.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=X(r.slice(5)),Z(o,r,i[r]));Y.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){Q.set(this,n)}):$(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=Q.get(o,n))?t:void 0!==(t=Z(o,n))?t:void 0;this.each(function(){Q.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){Q.remove(this,e)})}}),S.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Y.get(e,t),n&&(!r||Array.isArray(n)?r=Y.access(e,t,S.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=S.queue(e,t),r=n.length,i=n.shift(),o=S._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){S.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Y.get(e,n)||Y.access(e,n,{empty:S.Callbacks("once memory").add(function(){Y.remove(e,[t+"queue",n])})})}}),S.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?S.queue(this[0],t):void 0===n?this:this.each(function(){var e=S.queue(this,t,n);S._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&S.dequeue(this,t)})},dequeue:function(e){return this.each(function(){S.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=S.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=Y.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var ee=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,te=new RegExp("^(?:([+-])=|)("+ee+")([a-z%]*)$","i"),ne=["Top","Right","Bottom","Left"],re=E.documentElement,ie=function(e){return S.contains(e.ownerDocument,e)},oe={composed:!0};re.getRootNode&&(ie=function(e){return S.contains(e.ownerDocument,e)||e.getRootNode(oe)===e.ownerDocument});var ae=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&ie(e)&&"none"===S.css(e,"display")};function se(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return S.css(e,t,"")},u=s(),l=n&&n[3]||(S.cssNumber[t]?"":"px"),c=e.nodeType&&(S.cssNumber[t]||"px"!==l&&+u)&&te.exec(S.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)S.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,S.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ue={};function le(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=Y.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&ae(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ue[s])||(o=a.body.appendChild(a.createElement(s)),u=S.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ue[s]=u)))):"none"!==n&&(l[c]="none",Y.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}S.fn.extend({show:function(){return le(this,!0)},hide:function(){return le(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?S(this).show():S(this).hide()})}});var ce,fe,pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="<textarea>x</textarea>",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="<option></option>",y.option=!!ce.lastChild;var ge={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n<r;n++)Y.set(e[n],"globalEval",!t||Y.get(t[n],"globalEval"))}ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td,y.option||(ge.optgroup=ge.option=[1,"<select multiple='multiple'>","</select>"]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===w(o))S.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+S.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;S.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<S.inArray(o,r))i&&i.push(o);else if(l=ie(o),a=ve(f.appendChild(o),"script"),l&&ye(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}var be=/^([^.]*)(?:\.(.+)|)/;function we(){return!0}function Te(){return!1}function Ce(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ee(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ee(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Te;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return S().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=S.guid++)),e.each(function(){S.event.add(this,t,i,r,n)})}function Se(e,i,o){o?(Y.set(e,i,!1),S.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Y.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(S.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Y.set(this,i,r),t=o(this,i),this[i](),r!==(n=Y.get(this,i))||t?Y.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n&&n.value}else r.length&&(Y.set(this,i,{value:S.event.trigger(S.extend(r[0],S.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Y.get(e,i)&&S.event.add(e,i,we)}S.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.get(t);if(V(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&S.find.matchesSelector(re,i),n.guid||(n.guid=S.guid++),(u=v.events)||(u=v.events=Object.create(null)),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof S&&S.event.triggered!==e.type?S.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(P)||[""]).length;while(l--)d=g=(s=be.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=S.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=S.event.special[d]||{},c=S.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&S.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),S.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.hasData(e)&&Y.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(P)||[""]).length;while(l--)if(d=g=(s=be.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=S.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||S.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)S.event.remove(e,d+t[l],n,r,!0);S.isEmptyObject(u)&&Y.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),u=S.event.fix(e),l=(Y.get(this,"events")||Object.create(null))[u.type]||[],c=S.event.special[u.type]||{};for(s[0]=u,t=1;t<arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){a=S.event.handlers.call(this,u,l),t=0;while((i=a[t++])&&!u.isPropagationStopped()){u.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!u.isImmediatePropagationStopped())u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((S.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?-1<S(i,this).index(l):S.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(S.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[S.expando]?e:new S.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Se(t,"click",we),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Se(t,"click"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&A(t,"input")&&Y.get(t,"click")||A(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},S.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},S.Event=function(e,t){if(!(this instanceof S.Event))return new S.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?we:Te,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&S.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[S.expando]=!0},S.Event.prototype={constructor:S.Event,isDefaultPrevented:Te,isPropagationStopped:Te,isImmediatePropagationStopped:Te,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=we,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=we,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=we,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},S.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},S.event.addProp),S.each({focus:"focusin",blur:"focusout"},function(e,t){S.event.special[e]={setup:function(){return Se(this,e,Ce),!1},trigger:function(){return Se(this,e),!0},_default:function(){return!0},delegateType:t}}),S.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){S.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||S.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),S.fn.extend({on:function(e,t,n,r){return Ee(this,e,t,n,r)},one:function(e,t,n,r){return Ee(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,S(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=Te),this.each(function(){S.event.remove(this,e,n,t)})}});var ke=/<script|<style|<link/i,Ae=/checked\s*(?:[^=]|=\s*.checked.)/i,Ne=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n<r;n++)S.event.add(t,i,s[i][n]);Q.hasData(e)&&(o=Q.access(e),a=S.extend({},o),Q.set(t,a))}}function He(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&"string"==typeof d&&!y.checkClone&&Ae.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),He(t,r,i,o)});if(f&&(t=(e=xe(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=S.map(ve(e,"script"),De)).length;c<f;c++)u=e,c!==p&&(u=S.clone(u,!0,!0),s&&S.merge(a,ve(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,S.map(a,qe),c=0;c<s;c++)u=a[c],he.test(u.type||"")&&!Y.access(u,"globalEval")&&S.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?S._evalUrl&&!u.noModule&&S._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},l):b(u.textContent.replace(Ne,""),u,l))}return n}function Oe(e,t,n){for(var r,i=t?S.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||S.cleanData(ve(r)),r.parentNode&&(n&&ie(r)&&ye(ve(r,"script")),r.parentNode.removeChild(r));return e}S.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=ie(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||S.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ve(e),a=a||ve(c),r=0,i=o.length;r<i;r++)Le(o[r],a[r]);else Le(e,c);return 0<(a=ve(c,"script")).length&&ye(a,!f&&ve(e,"script")),c},cleanData:function(e){for(var t,n,r,i=S.event.special,o=0;void 0!==(n=e[o]);o++)if(V(n)){if(t=n[Y.expando]){if(t.events)for(r in t.events)i[r]?S.event.remove(n,r):S.removeEvent(n,r,t.handle);n[Y.expando]=void 0}n[Q.expando]&&(n[Q.expando]=void 0)}}}),S.fn.extend({detach:function(e){return Oe(this,e,!0)},remove:function(e){return Oe(this,e)},text:function(e){return $(this,function(e){return void 0===e?S.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return He(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||je(this,e).appendChild(e)})},prepend:function(){return He(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=je(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(S.cleanData(ve(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return S.clone(this,e,t)})},html:function(e){return $(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!ke.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=S.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(S.cleanData(ve(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return He(this,arguments,function(e){var t=this.parentNode;S.inArray(this,n)<0&&(S.cleanData(ve(this)),t&&t.replaceChild(e,this))},n)}}),S.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){S.fn[e]=function(e){for(var t,n=[],r=S(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),S(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var Pe=new RegExp("^("+ee+")(?!px)[a-z%]+$","i"),Re=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},Me=function(e,t,n){var r,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.call(e),t)e.style[i]=o[i];return r},Ie=new RegExp(ne.join("|"),"i");function We(e,t,n){var r,i,o,a,s=e.style;return(n=n||Re(e))&&(""!==(a=n.getPropertyValue(t)||n[t])||ie(e)||(a=S.style(e,t)),!y.pixelBoxStyles()&&Pe.test(a)&&Ie.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+"":a}function Fe(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",l.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",re.appendChild(u).appendChild(l);var e=C.getComputedStyle(l);n="1%"!==e.top,s=12===t(e.marginLeft),l.style.right="60%",o=36===t(e.right),r=36===t(e.width),l.style.position="absolute",i=12===t(l.offsetWidth/3),re.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=E.createElement("div"),l=E.createElement("div");l.style&&(l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",y.clearCloneStyle="content-box"===l.style.backgroundClip,S.extend(y,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,r;return null==a&&(e=E.createElement("table"),t=E.createElement("tr"),n=E.createElement("div"),e.style.cssText="position:absolute;left:-11111px;border-collapse:separate",t.style.cssText="border:1px solid",t.style.height="1px",n.style.height="9px",n.style.display="block",re.appendChild(e).appendChild(t).appendChild(n),r=C.getComputedStyle(t),a=parseInt(r.height,10)+parseInt(r.borderTopWidth,10)+parseInt(r.borderBottomWidth,10)===t.offsetHeight,re.removeChild(e)),a}}))}();var Be=["Webkit","Moz","ms"],$e=E.createElement("div").style,_e={};function ze(e){var t=S.cssProps[e]||_e[e];return t||(e in $e?e:_e[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=Be.length;while(n--)if((e=Be[n]+t)in $e)return e}(e)||e)}var Ue=/^(none|table(?!-c[ea]).+)/,Xe=/^--/,Ve={position:"absolute",visibility:"hidden",display:"block"},Ge={letterSpacing:"0",fontWeight:"400"};function Ye(e,t,n){var r=te.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function Qe(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=S.css(e,n+ne[a],!0,i)),r?("content"===n&&(u-=S.css(e,"padding"+ne[a],!0,i)),"margin"!==n&&(u-=S.css(e,"border"+ne[a]+"Width",!0,i))):(u+=S.css(e,"padding"+ne[a],!0,i),"padding"!==n?u+=S.css(e,"border"+ne[a]+"Width",!0,i):s+=S.css(e,"border"+ne[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function Je(e,t,n){var r=Re(e),i=(!y.boxSizingReliable()||n)&&"border-box"===S.css(e,"boxSizing",!1,r),o=i,a=We(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(Pe.test(a)){if(!n)return a;a="auto"}return(!y.boxSizingReliable()&&i||!y.reliableTrDimensions()&&A(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===S.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===S.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+Qe(e,t,n||(i?"border":"content"),o,r,a)+"px"}function Ke(e,t,n,r,i){return new Ke.prototype.init(e,t,n,r,i)}S.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=We(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=X(t),u=Xe.test(t),l=e.style;if(u||(t=ze(s)),a=S.cssHooks[t]||S.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=te.exec(n))&&i[1]&&(n=se(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(S.cssNumber[s]?"":"px")),y.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=X(t);return Xe.test(t)||(t=ze(s)),(a=S.cssHooks[t]||S.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=We(e,t,r)),"normal"===i&&t in Ge&&(i=Ge[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),S.each(["height","width"],function(e,u){S.cssHooks[u]={get:function(e,t,n){if(t)return!Ue.test(S.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?Je(e,u,n):Me(e,Ve,function(){return Je(e,u,n)})},set:function(e,t,n){var r,i=Re(e),o=!y.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===S.css(e,"boxSizing",!1,i),s=n?Qe(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-Qe(e,u,"border",!1,i)-.5)),s&&(r=te.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=S.css(e,u)),Ye(0,t,s)}}}),S.cssHooks.marginLeft=Fe(y.reliableMarginLeft,function(e,t){if(t)return(parseFloat(We(e,"marginLeft"))||e.getBoundingClientRect().left-Me(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),S.each({margin:"",padding:"",border:"Width"},function(i,o){S.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+ne[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(S.cssHooks[i+o].set=Ye)}),S.fn.extend({css:function(e,t){return $(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Re(e),i=t.length;a<i;a++)o[t[a]]=S.css(e,t[a],!1,r);return o}return void 0!==n?S.style(e,t,n):S.css(e,t)},e,t,1<arguments.length)}}),((S.Tween=Ke).prototype={constructor:Ke,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||S.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(S.cssNumber[n]?"":"px")},cur:function(){var e=Ke.propHooks[this.prop];return e&&e.get?e.get(this):Ke.propHooks._default.get(this)},run:function(e){var t,n=Ke.propHooks[this.prop];return this.options.duration?this.pos=t=S.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):Ke.propHooks._default.set(this),this}}).init.prototype=Ke.prototype,(Ke.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=S.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){S.fx.step[e.prop]?S.fx.step[e.prop](e):1!==e.elem.nodeType||!S.cssHooks[e.prop]&&null==e.elem.style[ze(e.prop)]?e.elem[e.prop]=e.now:S.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=Ke.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},S.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},S.fx=Ke.prototype.init,S.fx.step={};var Ze,et,tt,nt,rt=/^(?:toggle|show|hide)$/,it=/queueHooks$/;function ot(){et&&(!1===E.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(ot):C.setTimeout(ot,S.fx.interval),S.fx.tick())}function at(){return C.setTimeout(function(){Ze=void 0}),Ze=Date.now()}function st(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=ne[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function ut(e,t,n){for(var r,i=(lt.tweeners[t]||[]).concat(lt.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function lt(o,e,t){var n,a,r=0,i=lt.prefilters.length,s=S.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=Ze||at(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:S.extend({},e),opts:S.extend(!0,{specialEasing:{},easing:S.easing._default},t),originalProperties:e,originalOptions:t,startTime:Ze||at(),duration:t.duration,tweens:[],createTween:function(e,t){var n=S.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=X(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=S.cssHooks[r])&&"expand"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=lt.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(S._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return S.map(c,ut,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),S.fx.timer(S.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}S.Animation=S.extend(lt,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return se(n.elem,e,te.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=["*"]):e=e.match(P);for(var n,r=0,i=e.length;r<i;r++)n=e[r],lt.tweeners[n]=lt.tweeners[n]||[],lt.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),v=Y.get(e,"fxshow");for(r in n.queue||(null==(a=S._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,S.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],rt.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||S.style(e,r)}if((u=!S.isEmptyObject(t))||!S.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=Y.get(e,"display")),"none"===(c=S.css(e,"display"))&&(l?c=l:(le([e],!0),l=e.style.display||l,c=S.css(e,"display"),le([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===S.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?"hidden"in v&&(g=v.hidden):v=Y.access(e,"fxshow",{display:l}),o&&(v.hidden=!g),g&&le([e],!0),p.done(function(){for(r in g||le([e]),Y.remove(e,"fxshow"),d)S.style(e,r,d[r])})),u=ut(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?lt.prefilters.unshift(e):lt.prefilters.push(e)}}),S.speed=function(e,t,n){var r=e&&"object"==typeof e?S.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return S.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in S.fx.speeds?r.duration=S.fx.speeds[r.duration]:r.duration=S.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&S.dequeue(this,r.queue)},r},S.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=S.isEmptyObject(t),o=S.speed(e,n,r),a=function(){var e=lt(this,S.extend({},t),o);(i||Y.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=S.timers,r=Y.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&it.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||S.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=Y.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=S.timers,o=n?n.length:0;for(t.finish=!0,S.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),S.each(["toggle","show","hide"],function(e,r){var i=S.fn[r];S.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(st(r,!0),e,t,n)}}),S.each({slideDown:st("show"),slideUp:st("hide"),slideToggle:st("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){S.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),S.timers=[],S.fx.tick=function(){var e,t=0,n=S.timers;for(Ze=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||S.fx.stop(),Ze=void 0},S.fx.timer=function(e){S.timers.push(e),S.fx.start()},S.fx.interval=13,S.fx.start=function(){et||(et=!0,ot())},S.fx.stop=function(){et=null},S.fx.speeds={slow:600,fast:200,_default:400},S.fn.delay=function(r,e){return r=S.fx&&S.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},tt=E.createElement("input"),nt=E.createElement("select").appendChild(E.createElement("option")),tt.type="checkbox",y.checkOn=""!==tt.value,y.optSelected=nt.selected,(tt=E.createElement("input")).value="t",tt.type="radio",y.radioValue="t"===tt.value;var ct,ft=S.expr.attrHandle;S.fn.extend({attr:function(e,t){return $(this,S.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){S.removeAttr(this,e)})}}),S.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?S.prop(e,t,n):(1===o&&S.isXMLDoc(e)||(i=S.attrHooks[t.toLowerCase()]||(S.expr.match.bool.test(t)?ct:void 0)),void 0!==n?null===n?void S.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=S.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!y.radioValue&&"radio"===t&&A(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(P);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),ct={set:function(e,t,n){return!1===t?S.removeAttr(e,n):e.setAttribute(n,n),n}},S.each(S.expr.match.bool.source.match(/\w+/g),function(e,t){var a=ft[t]||S.find.attr;ft[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=ft[o],ft[o]=r,r=null!=a(e,t,n)?o:null,ft[o]=i),r}});var pt=/^(?:input|select|textarea|button)$/i,dt=/^(?:a|area)$/i;function ht(e){return(e.match(P)||[]).join(" ")}function gt(e){return e.getAttribute&&e.getAttribute("class")||""}function vt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(P)||[]}S.fn.extend({prop:function(e,t){return $(this,S.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[S.propFix[e]||e]})}}),S.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&S.isXMLDoc(e)||(t=S.propFix[t]||t,i=S.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=S.find.attr(e,"tabindex");return t?parseInt(t,10):pt.test(e.nodeName)||dt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),y.optSelected||(S.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),S.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){S.propFix[this.toLowerCase()]=this}),S.fn.extend({addClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).addClass(t.call(this,e,gt(this)))});if((e=vt(t)).length)while(n=this[u++])if(i=gt(n),r=1===n.nodeType&&" "+ht(i)+" "){a=0;while(o=e[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=ht(r))&&n.setAttribute("class",s)}return this},removeClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).removeClass(t.call(this,e,gt(this)))});if(!arguments.length)return this.attr("class","");if((e=vt(t)).length)while(n=this[u++])if(i=gt(n),r=1===n.nodeType&&" "+ht(i)+" "){a=0;while(o=e[a++])while(-1<r.indexOf(" "+o+" "))r=r.replace(" "+o+" "," ");i!==(s=ht(r))&&n.setAttribute("class",s)}return this},toggleClass:function(i,t){var o=typeof i,a="string"===o||Array.isArray(i);return"boolean"==typeof t&&a?t?this.addClass(i):this.removeClass(i):m(i)?this.each(function(e){S(this).toggleClass(i.call(this,e,gt(this),t),t)}):this.each(function(){var e,t,n,r;if(a){t=0,n=S(this),r=vt(i);while(e=r[t++])n.hasClass(e)?n.removeClass(e):n.addClass(e)}else void 0!==i&&"boolean"!==o||((e=gt(this))&&Y.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||!1===i?"":Y.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+ht(gt(n))+" ").indexOf(t))return!0;return!1}});var yt=/\r/g;S.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,S(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=S.map(t,function(e){return null==e?"":e+""})),(r=S.valHooks[this.type]||S.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=S.valHooks[t.type]||S.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(yt,""):null==e?"":e:void 0}}),S.extend({valHooks:{option:{get:function(e){var t=S.find.attr(e,"value");return null!=t?t:ht(S.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!A(n.parentNode,"optgroup"))){if(t=S(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=S.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<S.inArray(S.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),S.each(["radio","checkbox"],function(){S.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<S.inArray(S(e).val(),t)}},y.checkOn||(S.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),y.focusin="onfocusin"in C;var mt=/^(?:focusinfocus|focusoutblur)$/,xt=function(e){e.stopPropagation()};S.extend(S.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||E],d=v.call(e,"type")?e.type:e,h=v.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||E,3!==n.nodeType&&8!==n.nodeType&&!mt.test(d+S.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[S.expando]?e:new S.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:S.makeArray(t,[e]),c=S.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,mt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||E)&&p.push(a.defaultView||a.parentWindow||C)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(Y.get(o,"events")||Object.create(null))[e.type]&&Y.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&V(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!V(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),S.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,xt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,xt),S.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=S.extend(new S.Event,n,{type:e,isSimulated:!0});S.event.trigger(r,null,t)}}),S.fn.extend({trigger:function(e,t){return this.each(function(){S.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return S.event.trigger(e,t,n,!0)}}),y.focusin||S.each({focus:"focusin",blur:"focusout"},function(n,r){var i=function(e){S.event.simulate(r,e.target,S.event.fix(e))};S.event.special[r]={setup:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r);t||e.addEventListener(n,i,!0),Y.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r)-1;t?Y.access(e,r,t):(e.removeEventListener(n,i,!0),Y.remove(e,r))}}});var bt=C.location,wt={guid:Date.now()},Tt=/\?/;S.parseXML=function(e){var t,n;if(!e||"string"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,"text/xml")}catch(e){}return n=t&&t.getElementsByTagName("parsererror")[0],t&&!n||S.error("Invalid XML: "+(n?S.map(n.childNodes,function(e){return e.textContent}).join("\n"):e)),t};var Ct=/\[\]$/,Et=/\r?\n/g,St=/^(?:submit|button|image|reset|file)$/i,kt=/^(?:input|select|textarea|keygen)/i;function At(n,e,r,i){var t;if(Array.isArray(e))S.each(e,function(e,t){r||Ct.test(n)?i(n,t):At(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==w(e))i(n,e);else for(t in e)At(n+"["+t+"]",e[t],r,i)}S.param=function(e,t){var n,r=[],i=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!S.isPlainObject(e))S.each(e,function(){i(this.name,this.value)});else for(n in e)At(n,e[n],t,i);return r.join("&")},S.fn.extend({serialize:function(){return S.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=S.prop(this,"elements");return e?S.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!S(this).is(":disabled")&&kt.test(this.nodeName)&&!St.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=S(this).val();return null==n?null:Array.isArray(n)?S.map(n,function(e){return{name:t.name,value:e.replace(Et,"\r\n")}}):{name:t.name,value:n.replace(Et,"\r\n")}}).get()}});var Nt=/%20/g,jt=/#.*$/,Dt=/([?&])_=[^&]*/,qt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Lt=/^(?:GET|HEAD)$/,Ht=/^\/\//,Ot={},Pt={},Rt="*/".concat("*"),Mt=E.createElement("a");function It(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(P)||[];if(m(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function Wt(t,i,o,a){var s={},u=t===Pt;function l(e){var r;return s[e]=!0,S.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function Ft(e,t){var n,r,i=S.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&S.extend(!0,e,r),e}Mt.href=bt.href,S.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:bt.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(bt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Rt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":S.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Ft(Ft(e,S.ajaxSettings),t):Ft(S.ajaxSettings,e)},ajaxPrefilter:It(Ot),ajaxTransport:It(Pt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=S.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?S(y):S.event,x=S.Deferred(),b=S.Callbacks("once memory"),w=v.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=qt.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||bt.href)+"").replace(Ht,bt.protocol+"//"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||"*").toLowerCase().match(P)||[""],null==v.crossDomain){r=E.createElement("a");try{r.href=v.url,r.href=r.href,v.crossDomain=Mt.protocol+"//"+Mt.host!=r.protocol+"//"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&"string"!=typeof v.data&&(v.data=S.param(v.data,v.traditional)),Wt(Ot,v,t,T),h)return T;for(i in(g=S.event&&v.global)&&0==S.active++&&S.event.trigger("ajaxStart"),v.type=v.type.toUpperCase(),v.hasContent=!Lt.test(v.type),f=v.url.replace(jt,""),v.hasContent?v.data&&v.processData&&0===(v.contentType||"").indexOf("application/x-www-form-urlencoded")&&(v.data=v.data.replace(Nt,"+")):(o=v.url.slice(f.length),v.data&&(v.processData||"string"==typeof v.data)&&(f+=(Tt.test(f)?"&":"?")+v.data,delete v.data),!1===v.cache&&(f=f.replace(Dt,"$1"),o=(Tt.test(f)?"&":"?")+"_="+wt.guid+++o),v.url=f+o),v.ifModified&&(S.lastModified[f]&&T.setRequestHeader("If-Modified-Since",S.lastModified[f]),S.etag[f]&&T.setRequestHeader("If-None-Match",S.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader("Content-Type",v.contentType),T.setRequestHeader("Accept",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+("*"!==v.dataTypes[0]?", "+Rt+"; q=0.01":""):v.accepts["*"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u="abort",b.add(v.complete),T.done(v.success),T.fail(v.error),c=Wt(Pt,v,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,v]),h)return T;v.async&&0<v.timeout&&(d=C.setTimeout(function(){T.abort("timeout")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),!i&&-1<S.inArray("script",v.dataTypes)&&S.inArray("json",v.dataTypes)<0&&(v.converters["text script"]=function(){}),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(S.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(S.etag[f]=u)),204===e||"HEAD"===v.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger("ajaxComplete",[T,v]),--S.active||S.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return S.get(e,t,n,"json")},getScript:function(e,t){return S.get(e,void 0,t,"script")}}),S.each(["get","post"],function(e,i){S[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),S.ajax(S.extend({url:e,type:i,dataType:r,data:t,success:n},S.isPlainObject(e)&&e))}}),S.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),S._evalUrl=function(e,t,n){return S.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){S.globalEval(e,t,n)}})},S.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=S(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){S(this).wrapInner(n.call(this,e))}):this.each(function(){var e=S(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){S(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){S(this).replaceWith(this.childNodes)}),this}}),S.expr.pseudos.hidden=function(e){return!S.expr.pseudos.visible(e)},S.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},S.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var Bt={0:200,1223:204},$t=S.ajaxSettings.xhr();y.cors=!!$t&&"withCredentials"in $t,y.ajax=$t=!!$t,S.ajaxTransport(function(i){var o,a;if(y.cors||$t&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(Bt[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),S.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),S.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return S.globalEval(e),e}}}),S.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),S.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=S("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=ht(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&S.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?S("<div>").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var Xt=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;S.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||S.guid++,i},S.holdReady=function(e){e?S.readyWait++:S.ready(!0)},S.isArray=Array.isArray,S.parseJSON=JSON.parse,S.nodeName=A,S.isFunction=m,S.isWindow=x,S.camelCase=X,S.type=w,S.now=Date.now,S.isNumeric=function(e){var t=S.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},S.trim=function(e){return null==e?"":(e+"").replace(Xt,"")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return S});var Vt=C.jQuery,Gt=C.$;return S.noConflict=function(e){return C.$===S&&(C.$=Gt),e&&C.jQuery===S&&(C.jQuery=Vt),S},"undefined"==typeof e&&(C.jQuery=C.$=S),S});
-
-
-
@@ -10,7 +10,7 @@* */ var stopwords = ["a","and","are","as","at","be","but","by","for","if","in","into","is","it","near","no","not","of","on","or","such","that","the","their","then","there","these","they","this","to","was","will","with"]; var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"]; /* Non-minified version is copied as a separate JS file, is available */
-
@@ -197,101 +197,3 @@ var Stemmer = function() {} } var splitChars = (function() { var result = {}; var singles = [96, 180, 187, 191, 215, 247, 749, 885, 903, 907, 909, 930, 1014, 1648, 1748, 1809, 2416, 2473, 2481, 2526, 2601, 2609, 2612, 2615, 2653, 2702, 2706, 2729, 2737, 2740, 2857, 2865, 2868, 2910, 2928, 2948, 2961, 2971, 2973, 3085, 3089, 3113, 3124, 3213, 3217, 3241, 3252, 3295, 3341, 3345, 3369, 3506, 3516, 3633, 3715, 3721, 3736, 3744, 3748, 3750, 3756, 3761, 3781, 3912, 4239, 4347, 4681, 4695, 4697, 4745, 4785, 4799, 4801, 4823, 4881, 5760, 5901, 5997, 6313, 7405, 8024, 8026, 8028, 8030, 8117, 8125, 8133, 8181, 8468, 8485, 8487, 8489, 8494, 8527, 11311, 11359, 11687, 11695, 11703, 11711, 11719, 11727, 11735, 12448, 12539, 43010, 43014, 43019, 43587, 43696, 43713, 64286, 64297, 64311, 64317, 64319, 64322, 64325, 65141]; var i, j, start, end; for (i = 0; i < singles.length; i++) { result[singles[i]] = true; } var ranges = [[0, 47], [58, 64], [91, 94], [123, 169], [171, 177], [182, 184], [706, 709], [722, 735], [741, 747], [751, 879], [888, 889], [894, 901], [1154, 1161], [1318, 1328], [1367, 1368], [1370, 1376], [1416, 1487], [1515, 1519], [1523, 1568], [1611, 1631], [1642, 1645], [1750, 1764], [1767, 1773], [1789, 1790], [1792, 1807], [1840, 1868], [1958, 1968], [1970, 1983], [2027, 2035], [2038, 2041], [2043, 2047], [2070, 2073], [2075, 2083], [2085, 2087], [2089, 2307], [2362, 2364], [2366, 2383], [2385, 2391], [2402, 2405], [2419, 2424], [2432, 2436], [2445, 2446], [2449, 2450], [2483, 2485], [2490, 2492], [2494, 2509], [2511, 2523], [2530, 2533], [2546, 2547], [2554, 2564], [2571, 2574], [2577, 2578], [2618, 2648], [2655, 2661], [2672, 2673], [2677, 2692], [2746, 2748], [2750, 2767], [2769, 2783], [2786, 2789], [2800, 2820], [2829, 2830], [2833, 2834], [2874, 2876], [2878, 2907], [2914, 2917], [2930, 2946], [2955, 2957], [2966, 2968], [2976, 2978], [2981, 2983], [2987, 2989], [3002, 3023], [3025, 3045], [3059, 3076], [3130, 3132], [3134, 3159], [3162, 3167], [3170, 3173], [3184, 3191], [3199, 3204], [3258, 3260], [3262, 3293], [3298, 3301], [3312, 3332], [3386, 3388], [3390, 3423], [3426, 3429], [3446, 3449], [3456, 3460], [3479, 3481], [3518, 3519], [3527, 3584], [3636, 3647], [3655, 3663], [3674, 3712], [3717, 3718], [3723, 3724], [3726, 3731], [3752, 3753], [3764, 3772], [3774, 3775], [3783, 3791], [3802, 3803], [3806, 3839], [3841, 3871], [3892, 3903], [3949, 3975], [3980, 4095], [4139, 4158], [4170, 4175], [4182, 4185], [4190, 4192], [4194, 4196], [4199, 4205], [4209, 4212], [4226, 4237], [4250, 4255], [4294, 4303], [4349, 4351], [4686, 4687], [4702, 4703], [4750, 4751], [4790, 4791], [4806, 4807], [4886, 4887], [4955, 4968], [4989, 4991], [5008, 5023], [5109, 5120], [5741, 5742], [5787, 5791], [5867, 5869], [5873, 5887], [5906, 5919], [5938, 5951], [5970, 5983], [6001, 6015], [6068, 6102], [6104, 6107], [6109, 6111], [6122, 6127], [6138, 6159], [6170, 6175], [6264, 6271], [6315, 6319], [6390, 6399], [6429, 6469], [6510, 6511], [6517, 6527], [6572, 6592], [6600, 6607], [6619, 6655], [6679, 6687], [6741, 6783], [6794, 6799], [6810, 6822], [6824, 6916], [6964, 6980], [6988, 6991], [7002, 7042], [7073, 7085], [7098, 7167], [7204, 7231], [7242, 7244], [7294, 7400], [7410, 7423], [7616, 7679], [7958, 7959], [7966, 7967], [8006, 8007], [8014, 8015], [8062, 8063], [8127, 8129], [8141, 8143], [8148, 8149], [8156, 8159], [8173, 8177], [8189, 8303], [8306, 8307], [8314, 8318], [8330, 8335], [8341, 8449], [8451, 8454], [8456, 8457], [8470, 8472], [8478, 8483], [8506, 8507], [8512, 8516], [8522, 8525], [8586, 9311], [9372, 9449], [9472, 10101], [10132, 11263], [11493, 11498], [11503, 11516], [11518, 11519], [11558, 11567], [11622, 11630], [11632, 11647], [11671, 11679], [11743, 11822], [11824, 12292], [12296, 12320], [12330, 12336], [12342, 12343], [12349, 12352], [12439, 12444], [12544, 12548], [12590, 12592], [12687, 12689], [12694, 12703], [12728, 12783], [12800, 12831], [12842, 12880], [12896, 12927], [12938, 12976], [12992, 13311], [19894, 19967], [40908, 40959], [42125, 42191], [42238, 42239], [42509, 42511], [42540, 42559], [42592, 42593], [42607, 42622], [42648, 42655], [42736, 42774], [42784, 42785], [42889, 42890], [42893, 43002], [43043, 43055], [43062, 43071], [43124, 43137], [43188, 43215], [43226, 43249], [43256, 43258], [43260, 43263], [43302, 43311], [43335, 43359], [43389, 43395], [43443, 43470], [43482, 43519], [43561, 43583], [43596, 43599], [43610, 43615], [43639, 43641], [43643, 43647], [43698, 43700], [43703, 43704], [43710, 43711], [43715, 43738], [43742, 43967], [44003, 44015], [44026, 44031], [55204, 55215], [55239, 55242], [55292, 55295], [57344, 63743], [64046, 64047], [64110, 64111], [64218, 64255], [64263, 64274], [64280, 64284], [64434, 64466], [64830, 64847], [64912, 64913], [64968, 65007], [65020, 65135], [65277, 65295], [65306, 65312], [65339, 65344], [65371, 65381], [65471, 65473], [65480, 65481], [65488, 65489], [65496, 65497]]; for (i = 0; i < ranges.length; i++) { start = ranges[i][0]; end = ranges[i][1]; for (j = start; j <= end; j++) { result[j] = true; } } return result; })(); function splitQuery(query) { var result = []; var start = -1; for (var i = 0; i < query.length; i++) { if (splitChars[query.charCodeAt(i)]) { if (start !== -1) { result.push(query.slice(start, i)); start = -1; } } else if (start === -1) { start = i; } } if (start !== -1) { result.push(query.slice(start)); } return result; }
-
-
-
@@ -8,18 +8,20 @@* :license: BSD, see LICENSE for details. * */ "use strict"; if (!Scorer) { /** * Simple result scoring code. */ /** * Simple result scoring code. */ if (typeof Scorer === "undefined") { var Scorer = { // Implement the following function to further tweak the score for each result // The function takes a result array [filename, title, anchor, descr, score] // The function takes a result array [docname, title, anchor, descr, score, filename] // and returns the new score. /* score: function(result) { return result[4]; score: result => { const [docname, title, anchor, descr, score, filename] = result return score }, */
-
@@ -28,9 +30,11 @@ if (!Scorer) {// or matches in the last dotted part of the object name objPartialMatch: 6, // Additive scores depending on the priority of the object objPrio: {0: 15, // used to be importantResults 1: 5, // used to be objectResults 2: -5}, // used to be unimportantResults objPrio: { 0: 15, // used to be importantResults 1: 5, // used to be objectResults 2: -5, // used to be unimportantResults }, // Used when the priority is not in the mapping. objPrioDefault: 0,
-
@@ -39,456 +43,455 @@ if (!Scorer) {partialTitle: 7, // query found in terms term: 5, partialTerm: 2 partialTerm: 2, }; } if (!splitQuery) { function splitQuery(query) { return query.split(/\s+/); const _removeChildren = (element) => { while (element && element.lastChild) element.removeChild(element.lastChild); }; /** * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping */ const _escapeRegExp = (string) => string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string const _displayItem = (item, highlightTerms, searchTerms) => { const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; const docUrlRoot = DOCUMENTATION_OPTIONS.URL_ROOT; const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; const [docName, title, anchor, descr] = item; let listItem = document.createElement("li"); let requestUrl; let linkUrl; if (docBuilder === "dirhtml") { // dirhtml builder let dirname = docName + "/"; if (dirname.match(/\/index\/$/)) dirname = dirname.substring(0, dirname.length - 6); else if (dirname === "index/") dirname = ""; requestUrl = docUrlRoot + dirname; linkUrl = requestUrl; } else { // normal html builders requestUrl = docUrlRoot + docName + docFileSuffix; linkUrl = docName + docLinkSuffix; } const params = new URLSearchParams(); params.set("highlight", [...highlightTerms].join(" ")); let linkEl = listItem.appendChild(document.createElement("a")); linkEl.href = linkUrl + "?" + params.toString() + anchor; linkEl.innerHTML = title; if (descr) listItem.appendChild(document.createElement("span")).innerText = " (" + descr + ")"; else if (showSearchSummary) fetch(requestUrl) .then((responseData) => responseData.text()) .then((data) => { if (data) listItem.appendChild( Search.makeSearchSummary(data, searchTerms, highlightTerms) ); }); Search.output.appendChild(listItem); }; const _finishSearch = (resultCount) => { Search.stopPulse(); Search.title.innerText = _("Search Results"); if (!resultCount) Search.status.innerText = Documentation.gettext( "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." ); else Search.status.innerText = _( `Search finished, found ${resultCount} page(s) matching the search query.` ); }; const _displayNextItem = ( results, resultCount, highlightTerms, searchTerms ) => { // results left, load the summary and display it // this is intended to be dynamic (don't sub resultsCount) if (results.length) { _displayItem(results.pop(), highlightTerms, searchTerms); setTimeout( () => _displayNextItem(results, resultCount, highlightTerms, searchTerms), 5 ); } // search finished, update title and status message else _finishSearch(resultCount); }; /** * Default splitQuery function. Can be overridden in ``sphinx.search`` with a * custom function per language. * * The regular expression works by splitting the string on consecutive characters * that are not Unicode letters, numbers, underscores, or emoji characters. * This is the same as ``\W+`` in Python, preserving the surrogate pair area. */ if (typeof splitQuery === "undefined") { var splitQuery = (query) => query .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu) .filter(term => term) // remove remaining empty strings } /** * Search Module */ var Search = { _index : null, _queued_query : null, _pulse_status : -1, htmlToText : function(htmlString) { var virtualDocument = document.implementation.createHTMLDocument('virtual'); var htmlElement = $(htmlString, virtualDocument); htmlElement.find('.headerlink').remove(); docContent = htmlElement.find('[role=main]')[0]; if(docContent === undefined) { console.warn("Content block not found. Sphinx search tries to obtain it " + "via '[role=main]'. Could you check your theme or template."); return ""; } return docContent.textContent || docContent.innerText; const Search = { _index: null, _queued_query: null, _pulse_status: -1, htmlToText: (htmlString) => { const htmlElement = document .createRange() .createContextualFragment(htmlString); _removeChildren(htmlElement.querySelectorAll(".headerlink")); const docContent = htmlElement.querySelector('[role="main"]'); if (docContent !== undefined) return docContent.textContent; console.warn( "Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template." ); return ""; }, init : function() { var params = $.getQueryParameters(); if (params.q) { var query = params.q[0]; $('input[name="q"]')[0].value = query; this.performSearch(query); } init: () => { const query = new URLSearchParams(window.location.search).get("q"); document .querySelectorAll('input[name="q"]') .forEach((el) => (el.value = query)); if (query) Search.performSearch(query); }, loadIndex : function(url) { $.ajax({type: "GET", url: url, data: null, dataType: "script", cache: true, complete: function(jqxhr, textstatus) { if (textstatus != "success") { document.getElementById("searchindexloader").src = url; } }}); }, loadIndex: (url) => (document.body.appendChild(document.createElement("script")).src = url), setIndex : function(index) { var q; this._index = index; if ((q = this._queued_query) !== null) { this._queued_query = null; Search.query(q); setIndex: (index) => { Search._index = index; if (Search._queued_query !== null) { const query = Search._queued_query; Search._queued_query = null; Search.query(query); } }, hasIndex : function() { return this._index !== null; }, hasIndex: () => Search._index !== null, deferQuery : function(query) { this._queued_query = query; }, deferQuery: (query) => (Search._queued_query = query), stopPulse : function() { this._pulse_status = 0; }, stopPulse: () => (Search._pulse_status = -1), startPulse : function() { if (this._pulse_status >= 0) return; function pulse() { var i; startPulse: () => { if (Search._pulse_status >= 0) return; const pulse = () => { Search._pulse_status = (Search._pulse_status + 1) % 4; var dotString = ''; for (i = 0; i < Search._pulse_status; i++) dotString += '.'; Search.dots.text(dotString); if (Search._pulse_status > -1) window.setTimeout(pulse, 500); } Search.dots.innerText = ".".repeat(Search._pulse_status); if (Search._pulse_status >= 0) window.setTimeout(pulse, 500); }; pulse(); }, /** * perform a search for something (or wait until index is loaded) */ performSearch : function(query) { performSearch: (query) => { // create the required interface elements this.out = $('#search-results'); this.title = $('<h2>' + _('Searching') + '</h2>').appendTo(this.out); this.dots = $('<span></span>').appendTo(this.title); this.status = $('<p class="search-summary"> </p>').appendTo(this.out); this.output = $('<ul class="search"/>').appendTo(this.out); $('#search-progress').text(_('Preparing search...')); this.startPulse(); const searchText = document.createElement("h2"); searchText.textContent = _("Searching"); const searchSummary = document.createElement("p"); searchSummary.classList.add("search-summary"); searchSummary.innerText = ""; const searchList = document.createElement("ul"); searchList.classList.add("search"); const out = document.getElementById("search-results"); Search.title = out.appendChild(searchText); Search.dots = Search.title.appendChild(document.createElement("span")); Search.status = out.appendChild(searchSummary); Search.output = out.appendChild(searchList); const searchProgress = document.getElementById("search-progress"); // Some themes don't use the search progress node if (searchProgress) { searchProgress.innerText = _("Preparing search..."); } Search.startPulse(); // index already loaded, the browser was quick! if (this.hasIndex()) this.query(query); else this.deferQuery(query); if (Search.hasIndex()) Search.query(query); else Search.deferQuery(query); }, /** * execute search (requires search index to be loaded) */ query : function(query) { var i; // stem the searchterms and add them to the correct list var stemmer = new Stemmer(); var searchterms = []; var excluded = []; var hlterms = []; var tmp = splitQuery(query); var objectterms = []; for (i = 0; i < tmp.length; i++) { if (tmp[i] !== "") { objectterms.push(tmp[i].toLowerCase()); } query: (query) => { // stem the search terms and add them to the correct list const stemmer = new Stemmer(); const searchTerms = new Set(); const excludedTerms = new Set(); const highlightTerms = new Set(); const objectTerms = new Set(splitQuery(query.toLowerCase().trim())); splitQuery(query.trim()).forEach((queryTerm) => { const queryTermLower = queryTerm.toLowerCase(); // maybe skip this "word" // stopwords array is from language_data.js if ( stopwords.indexOf(queryTermLower) !== -1 || queryTerm.match(/^\d+$/) ) return; if ($u.indexOf(stopwords, tmp[i].toLowerCase()) != -1 || tmp[i] === "") { // skip this "word" continue; } // stem the word var word = stemmer.stemWord(tmp[i].toLowerCase()); // prevent stemmer from cutting word smaller than two chars if(word.length < 3 && tmp[i].length >= 3) { word = tmp[i]; } var toAppend; let word = stemmer.stemWord(queryTermLower); // select the correct list if (word[0] == '-') { toAppend = excluded; word = word.substr(1); } if (word[0] === "-") excludedTerms.add(word.substr(1)); else { toAppend = searchterms; hlterms.push(tmp[i].toLowerCase()); searchTerms.add(word); highlightTerms.add(queryTermLower); } // only add if not already in the list if (!$u.contains(toAppend, word)) toAppend.push(word); } var highlightstring = '?highlight=' + $.urlencode(hlterms.join(" ")); // console.debug('SEARCH: searching for:'); // console.info('required: ', searchterms); // console.info('excluded: ', excluded); }); // prepare search var terms = this._index.terms; var titleterms = this._index.titleterms; // console.debug("SEARCH: searching for:"); // console.info("required: ", [...searchTerms]); // console.info("excluded: ", [...excludedTerms]); // array of [filename, title, anchor, descr, score] var results = []; $('#search-progress').empty(); // array of [docname, title, anchor, descr, score, filename] let results = []; _removeChildren(document.getElementById("search-progress")); // lookup as object for (i = 0; i < objectterms.length; i++) { var others = [].concat(objectterms.slice(0, i), objectterms.slice(i+1, objectterms.length)); results = results.concat(this.performObjectSearch(objectterms[i], others)); } objectTerms.forEach((term) => results.push(...Search.performObjectSearch(term, objectTerms)) ); // lookup as search terms in fulltext results = results.concat(this.performTermsSearch(searchterms, excluded, terms, titleterms)); results.push(...Search.performTermsSearch(searchTerms, excludedTerms)); // let the scorer override scores with a custom scoring function if (Scorer.score) { for (i = 0; i < results.length; i++) results[i][4] = Scorer.score(results[i]); } if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item))); // now sort the results by score (in opposite order of appearance, since the // display function below uses pop() to retrieve items) and then // alphabetically results.sort(function(a, b) { var left = a[4]; var right = b[4]; if (left > right) { return 1; } else if (left < right) { return -1; } else { results.sort((a, b) => { const leftScore = a[4]; const rightScore = b[4]; if (leftScore === rightScore) { // same score: sort alphabetically left = a[1].toLowerCase(); right = b[1].toLowerCase(); return (left > right) ? -1 : ((left < right) ? 1 : 0); const leftTitle = a[1].toLowerCase(); const rightTitle = b[1].toLowerCase(); if (leftTitle === rightTitle) return 0; return leftTitle > rightTitle ? -1 : 1; // inverted is intentional } return leftScore > rightScore ? 1 : -1; }); // remove duplicate search results // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept let seen = new Set(); results = results.reverse().reduce((acc, result) => { let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(','); if (!seen.has(resultStr)) { acc.push(result); seen.add(resultStr); } return acc; }, []); results = results.reverse(); // for debugging //Search.lastresults = results.slice(); // a copy //console.info('search results:', Search.lastresults); // console.info("search results:", Search.lastresults); // print the results var resultCount = results.length; function displayNextItem() { // results left, load the summary and display it if (results.length) { var item = results.pop(); var listItem = $('<li></li>'); var requestUrl = ""; var linkUrl = ""; if (DOCUMENTATION_OPTIONS.BUILDER === 'dirhtml') { // dirhtml builder var dirname = item[0] + '/'; if (dirname.match(/\/index\/$/)) { dirname = dirname.substring(0, dirname.length-6); } else if (dirname == 'index/') { dirname = ''; } requestUrl = DOCUMENTATION_OPTIONS.URL_ROOT + dirname; linkUrl = requestUrl; } else { // normal html builders requestUrl = DOCUMENTATION_OPTIONS.URL_ROOT + item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX; linkUrl = item[0] + DOCUMENTATION_OPTIONS.LINK_SUFFIX; } listItem.append($('<a/>').attr('href', linkUrl + highlightstring + item[2]).html(item[1])); if (item[3]) { listItem.append($('<span> (' + item[3] + ')</span>')); Search.output.append(listItem); setTimeout(function() { displayNextItem(); }, 5); } else if (DOCUMENTATION_OPTIONS.HAS_SOURCE) { $.ajax({url: requestUrl, dataType: "text", complete: function(jqxhr, textstatus) { var data = jqxhr.responseText; if (data !== '' && data !== undefined) { var summary = Search.makeSearchSummary(data, searchterms, hlterms); if (summary) { listItem.append(summary); } } Search.output.append(listItem); setTimeout(function() { displayNextItem(); }, 5); }}); } else { // no source available, just display title Search.output.append(listItem); setTimeout(function() { displayNextItem(); }, 5); } } // search finished, update title and status message else { Search.stopPulse(); Search.title.text(_('Search Results')); if (!resultCount) Search.status.text(_('Your search did not match any documents. Please make sure that all words are spelled correctly and that you\'ve selected enough categories.')); else Search.status.text(_('Search finished, found %s page(s) matching the search query.').replace('%s', resultCount)); Search.status.fadeIn(500); } } displayNextItem(); _displayNextItem(results, results.length, highlightTerms, searchTerms); }, /** * search for object names */ performObjectSearch : function(object, otherterms) { var filenames = this._index.filenames; var docnames = this._index.docnames; var objects = this._index.objects; var objnames = this._index.objnames; var titles = this._index.titles; var i; var results = []; for (var prefix in objects) { for (var iMatch = 0; iMatch != objects[prefix].length; ++iMatch) { var match = objects[prefix][iMatch]; var name = match[4]; var fullname = (prefix ? prefix + '.' : '') + name; var fullnameLower = fullname.toLowerCase() if (fullnameLower.indexOf(object) > -1) { var score = 0; var parts = fullnameLower.split('.'); // check for different match types: exact matches of full name or // "last name" (i.e. last dotted part) if (fullnameLower == object || parts[parts.length - 1] == object) { score += Scorer.objNameMatch; // matches in last name } else if (parts[parts.length - 1].indexOf(object) > -1) { score += Scorer.objPartialMatch; } var objname = objnames[match[1]][2]; var title = titles[match[0]]; // If more than one term searched for, we require other words to be // found in the name/title/description if (otherterms.length > 0) { var haystack = (prefix + ' ' + name + ' ' + objname + ' ' + title).toLowerCase(); var allfound = true; for (i = 0; i < otherterms.length; i++) { if (haystack.indexOf(otherterms[i]) == -1) { allfound = false; break; } } if (!allfound) { continue; } } var descr = objname + _(', in ') + title; var anchor = match[3]; if (anchor === '') anchor = fullname; else if (anchor == '-') anchor = objnames[match[1]][1] + '-' + fullname; // add custom score for some objects according to scorer if (Scorer.objPrio.hasOwnProperty(match[2])) { score += Scorer.objPrio[match[2]]; } else { score += Scorer.objPrioDefault; } results.push([docnames[match[0]], fullname, '#'+anchor, descr, score, filenames[match[0]]]); } performObjectSearch: (object, objectTerms) => { const filenames = Search._index.filenames; const docNames = Search._index.docnames; const objects = Search._index.objects; const objNames = Search._index.objnames; const titles = Search._index.titles; const results = []; const objectSearchCallback = (prefix, match) => { const name = match[4] const fullname = (prefix ? prefix + "." : "") + name; const fullnameLower = fullname.toLowerCase(); if (fullnameLower.indexOf(object) < 0) return; let score = 0; const parts = fullnameLower.split("."); // check for different match types: exact matches of full name or // "last name" (i.e. last dotted part) if (fullnameLower === object || parts.slice(-1)[0] === object) score += Scorer.objNameMatch; else if (parts.slice(-1)[0].indexOf(object) > -1) score += Scorer.objPartialMatch; // matches in last name const objName = objNames[match[1]][2]; const title = titles[match[0]]; // If more than one term searched for, we require other words to be // found in the name/title/description const otherTerms = new Set(objectTerms); otherTerms.delete(object); if (otherTerms.size > 0) { const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase(); if ( [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0) ) return; } } let anchor = match[3]; if (anchor === "") anchor = fullname; else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname; const descr = objName + _(", in ") + title; // add custom score for some objects according to scorer if (Scorer.objPrio.hasOwnProperty(match[2])) score += Scorer.objPrio[match[2]]; else score += Scorer.objPrioDefault; results.push([ docNames[match[0]], fullname, "#" + anchor, descr, score, filenames[match[0]], ]); }; Object.keys(objects).forEach((prefix) => objects[prefix].forEach((array) => objectSearchCallback(prefix, array) ) ); return results; }, /** * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions */ escapeRegExp : function(string) { return string.replace(/[.*+\-?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string }, /** * search for full-text terms in the index */ performTermsSearch : function(searchterms, excluded, terms, titleterms) { var docnames = this._index.docnames; var filenames = this._index.filenames; var titles = this._index.titles; performTermsSearch: (searchTerms, excludedTerms) => { // prepare search const terms = Search._index.terms; const titleTerms = Search._index.titleterms; const docNames = Search._index.docnames; const filenames = Search._index.filenames; const titles = Search._index.titles; var i, j, file; var fileMap = {}; var scoreMap = {}; var results = []; const scoreMap = new Map(); const fileMap = new Map(); // perform the search on the required terms for (i = 0; i < searchterms.length; i++) { var word = searchterms[i]; var files = []; var _o = [ {files: terms[word], score: Scorer.term}, {files: titleterms[word], score: Scorer.title} searchTerms.forEach((word) => { const files = []; const arr = [ { files: terms[word], score: Scorer.term }, { files: titleTerms[word], score: Scorer.title }, ]; // add support for partial matches if (word.length > 2) { var word_regex = this.escapeRegExp(word); for (var w in terms) { if (w.match(word_regex) && !terms[word]) { _o.push({files: terms[w], score: Scorer.partialTerm}) } } for (var w in titleterms) { if (w.match(word_regex) && !titleterms[word]) { _o.push({files: titleterms[w], score: Scorer.partialTitle}) } } const escapedWord = _escapeRegExp(word); Object.keys(terms).forEach((term) => { if (term.match(escapedWord) && !terms[word]) arr.push({ files: terms[term], score: Scorer.partialTerm }); }); Object.keys(titleTerms).forEach((term) => { if (term.match(escapedWord) && !titleTerms[word]) arr.push({ files: titleTerms[word], score: Scorer.partialTitle }); }); } // no match but word was a required one if ($u.every(_o, function(o){return o.files === undefined;})) { break; } if (arr.every((record) => record.files === undefined)) return; // found search word in contents $u.each(_o, function(o) { var _files = o.files; if (_files === undefined) return if (_files.length === undefined) _files = [_files]; files = files.concat(_files); // set score for the word in each file to Scorer.term for (j = 0; j < _files.length; j++) { file = _files[j]; if (!(file in scoreMap)) scoreMap[file] = {}; scoreMap[file][word] = o.score; } arr.forEach((record) => { if (record.files === undefined) return; let recordFiles = record.files; if (recordFiles.length === undefined) recordFiles = [recordFiles]; files.push(...recordFiles); // set score for the word in each file recordFiles.forEach((file) => { if (!scoreMap.has(file)) scoreMap.set(file, {}); scoreMap.get(file)[word] = record.score; }); }); // create the mapping for (j = 0; j < files.length; j++) { file = files[j]; if (file in fileMap && fileMap[file].indexOf(word) === -1) fileMap[file].push(word); else fileMap[file] = [word]; } } files.forEach((file) => { if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1) fileMap.get(file).push(word); else fileMap.set(file, [word]); }); }); // now check if the files don't contain excluded terms for (file in fileMap) { var valid = true; const results = []; for (const [file, wordList] of fileMap) { // check if all requirements are matched var filteredTermCount = // as search terms with length < 3 are discarded: ignore searchterms.filter(function(term){return term.length > 2}).length // as search terms with length < 3 are discarded const filteredTermCount = [...searchTerms].filter( (term) => term.length > 2 ).length; if ( fileMap[file].length != searchterms.length && fileMap[file].length != filteredTermCount ) continue; wordList.length !== searchTerms.size && wordList.length !== filteredTermCount ) continue; // ensure that none of the excluded terms is in the search result for (i = 0; i < excluded.length; i++) { if (terms[excluded[i]] == file || titleterms[excluded[i]] == file || $u.contains(terms[excluded[i]] || [], file) || $u.contains(titleterms[excluded[i]] || [], file)) { valid = false; break; } } if ( [...excludedTerms].some( (term) => terms[term] === file || titleTerms[term] === file || (terms[term] || []).includes(file) || (titleTerms[term] || []).includes(file) ) ) break; // if we have still a valid result we can add it to the result list if (valid) { // select one (max) score for the file. // for better ranking, we should calculate ranking by using words statistics like basic tf-idf... var score = $u.max($u.map(fileMap[file], function(w){return scoreMap[file][w]})); results.push([docnames[file], titles[file], '', null, score, filenames[file]]); } // select one (max) score for the file. const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w])); // add result to the result list results.push([ docNames[file], titles[file], "", null, score, filenames[file], ]); } return results; },
-
@@ -496,34 +499,33 @@ var Search = {/** * helper function to return a node containing the * search summary for a given text. keywords is a list * of stemmed words, hlwords is the list of normal, unstemmed * of stemmed words, highlightWords is the list of normal, unstemmed * words. the first one is used to find the occurrence, the * latter for highlighting it. */ makeSearchSummary : function(htmlText, keywords, hlwords) { var text = Search.htmlToText(htmlText); if (text == "") { return null; } var textLower = text.toLowerCase(); var start = 0; $.each(keywords, function() { var i = textLower.indexOf(this.toLowerCase()); if (i > -1) start = i; }); start = Math.max(start - 120, 0); var excerpt = ((start > 0) ? '...' : '') + $.trim(text.substr(start, 240)) + ((start + 240 - text.length) ? '...' : ''); var rv = $('<p class="context"></p>').text(excerpt); $.each(hlwords, function() { rv = rv.highlightText(this, 'highlighted'); }); return rv; } makeSearchSummary: (htmlText, keywords, highlightWords) => { const text = Search.htmlToText(htmlText).toLowerCase(); if (text === "") return null; const actualStartPosition = [...keywords] .map((k) => text.indexOf(k.toLowerCase())) .filter((i) => i > -1) .slice(-1)[0]; const startWithContext = Math.max(actualStartPosition - 120, 0); const top = startWithContext === 0 ? "" : "..."; const tail = startWithContext + 240 < text.length ? "..." : ""; let summary = document.createElement("div"); summary.classList.add("context"); summary.innerText = top + text.substr(startWithContext, 240).trim() + tail; highlightWords.forEach((highlightWord) => _highlightText(summary, highlightWord, "highlighted") ); return summary; }, }; $(document).ready(function() { Search.init(); }); _ready(Search.init);
-
-
-
@@ -15,6 +15,7 @@<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script> <script src="_static/jquery.js"></script> <script src="_static/underscore.js"></script> <script src="_static/_sphinx_javascript_frameworks_compat.js"></script> <script src="_static/doctools.js"></script> <script src="_static/js/theme.js"></script> <link rel="index" title="Index" href="#" />
-
-
-
@@ -1,7 +1,8 @@<!DOCTYPE html> <html class="writer-html5" lang="en" > <head> <meta charset="utf-8" /> <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Mathematics in Lean — Mathematics in Lean 0.1 documentation</title> <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
-
@@ -15,6 +16,7 @@<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script> <script src="_static/jquery.js"></script> <script src="_static/underscore.js"></script> <script src="_static/_sphinx_javascript_frameworks_compat.js"></script> <script src="_static/doctools.js"></script> <script src="_static/js/theme.js"></script> <link rel="index" title="Index" href="genindex.html" />
-
@@ -77,8 +79,8 @@<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> <div itemprop="articleBody"> <div class="section" id="mathematics-in-lean"> <h1>Mathematics in Lean<a class="headerlink" href="#mathematics-in-lean" title="Permalink to this headline"></a></h1> <section id="mathematics-in-lean"> <h1>Mathematics in Lean<a class="headerlink" href="#mathematics-in-lean" title="Permalink to this heading"></a></h1> <div class="toctree-wrapper compound"> <ul> <li class="toctree-l1"><a class="reference internal" href="C01_Introduction.html">1. Introduction</a><ul>
-
@@ -148,7 +150,7 @@</div> <div class="toctree-wrapper compound"> </div> </div> </section> </div>
-
-
-
@@ -16,6 +16,7 @@<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script> <script src="_static/jquery.js"></script> <script src="_static/underscore.js"></script> <script src="_static/_sphinx_javascript_frameworks_compat.js"></script> <script src="_static/doctools.js"></script> <script src="_static/js/theme.js"></script> <script src="_static/searchtools.js"></script>
-
-
-
@@ -1,1 +1,1 @@Search.setIndex({docnames:["C01_Introduction","C02_Basics","C03_Logic","C04_Sets_and_Functions","C05_Elementary_Number_Theory","C06_Structures","C07_Hierarchies","C08_Topology","C09_Differential_Calculus","C10_Integration_and_Measure_Theory","genindex","index"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":4,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":3,"sphinx.domains.rst":2,"sphinx.domains.std":2,sphinx:56},filenames:["C01_Introduction.rst","C02_Basics.rst","C03_Logic.rst","C04_Sets_and_Functions.rst","C05_Elementary_Number_Theory.rst","C06_Structures.rst","C07_Hierarchies.rst","C08_Topology.rst","C09_Differential_Calculus.rst","C10_Integration_and_Measure_Theory.rst","genindex.rst","index.rst"],objects:{},objnames:{},objtypes:{},terms:{"0":[0,1,2,3,4,5,6,7,8,9],"02463336":6,"1":[1,2,3,4,5,6,7,8,9],"10":2,"12":4,"15":2,"17":4,"2":[0,1,2,3,4,5,6,7,8,9],"256":7,"263":6,"27":4,"2c":4,"3":[0,1,2,3,4,5,6,7],"37":2,"4":[0,1,2,4,5,7,8],"4c":4,"5":[1,2,5,7,8],"50":6,"512":7,"6":[2,4,5,6,7,8],"64":7,"7":[2,4],"70":6,"73":6,"8":[2,4,7],"9":8,"\u00b9":[1,3,5,6,7],"\u02e2":7,"\u03b1":[1,2,3,4,5,6,7,8,9],"\u03b2":[1,2,3,5,6,7,9],"\u03b3":[1,2,5,7],"\u03b4":[2,7],"\u03b4po":7,"\u03b5":[2,7,8],"\u03b52po":2,"\u03b5_po":[7,8],"\u03b5k_po":8,"\u03b5po":[2,7],"\u03b9":[7,8,9],"\u03bc":[7,9],"\u03bd":9,"\u03c0":[7,8],"\u03c3":5,"\u03c6":7,"\u1d50":9,"\u1da0":[7,8,9],"\u2080":3,"\u2081":6,"\u2102":[1,5,8],"\u2115":[0,1,2,3,4,5,6,7,8,9],"\u211a":[1,4,7],"\u211d":[1,2,3,5,6,7,8,9],"\u2124":[1,4,5,6],"\ud835\udcdd":[7,8,9],"\ud835\udcdf":7,"\ud835\udce4":7,"\ud835\udd42":8,"\ud835\udd5c":[8,9],"\ud835\udfd9":6,"abstract":[1,2,5,6,7],"add_assoc\u2083":6,"addcommgroup\u2083":6,"addcommmonoid\u2083":6,"addcommsemigroup\u2083":6,"addgroup\u2081":5,"addgroup\u2082":5,"addgroup\u2083":6,"addmonoid\u2083":6,"addmonoid\u2084":6,"addmonoidhom\u2081":6,"addsemigroup\u2083":6,"boolean":1,"break":6,"case":[1,2,3,4,5,6,7,9],"class":[1,4,5,6,7,8,9],"commgroup\u2083":6,"commmonoid\u2083":6,"commsemigroup\u2083":6,"default":[1,2,3,4,5,6,8],"dia\u2081":6,"diaoneclass\u2081":6,"do":[0,1,2,3,4,5,6,7,8,9],"export":6,"final":[1,2,3,5,7,9],"fr\u00e9chet":8,"function":[1,2,4,5,6,8,9,11],"group\u2081":[5,6],"group\u2081cat":5,"group\u2082":5,"group\u2083":6,"h\u03b5":8,"h\u2080":[1,2,3,4,7],"h\u2081":[1,2,3,4],"h\u2082":[1,3,4],"h\u2083":[1,3],"hasinvgroup\u2082":5,"hasmulgroup\u2082":5,"hasonegroup\u2082":5,"import":[1,2,3,4,5,6,7,9],"int":[5,6],"inv\u2081":6,"ismonoidhom\u2081":6,"ismonoidhom\u2082":6,"k\u00fclshammer":0,"le\u2081":6,"left_inv_eq_right_inv\u2081":6,"long":[1,2,3,5,6,8],"lt\u2081":6,"map\u2082":6,"mem_iinter\u2082":3,"mem_iunion\u2082":3,"module\u2081":6,"module\u2083":6,"monoid\u2081":6,"monoid\u2082":6,"monoid\u2083":6,"monoidhom\u2081":6,"monoidhomclass\u2081":6,"monoidhomclass\u2082":6,"monoidhomclass\u2083":6,"mul_assoc\u2083":6,"mul_left_cancel\u2083":6,"mul_right_cancel\u2083":6,"n\u2080":2,"n\u2081":2,"new":[0,1,2,3,4,5,6,7],"nsmul\u2081":6,"one\u2081":6,"one\u2082":6,"orderedcommmonoid\u2081":6,"partialorder\u2081":6,"pos\u2080":2,"preorder\u2081":6,"return":[0,2,3,4,5,7],"ring\u2081":6,"ring\u2083":6,"ringhom\u2081":6,"ringhomclass\u2083":6,"s\u1d9c":[7,9],"s\u2081":6,"s\u2082":6,"schr\u00f6der":11,"semigroup\u2081":6,"semigroup\u2082":6,"semigroup\u2083":6,"short":[0,1,2,3,4,5],"smul\u2083":6,"subgroup\u2081":6,"subgroupclass\u2081":6,"submonoid\u2081":6,"submonoid\u2081monoid":6,"submonoidclass\u2081":6,"switch":[1,6],"tendsto\u2081":7,"tendsto\u2082":7,"toaddcommgroup\u2083":6,"toaddgroup\u2083":6,"todia\u2081":6,"todiaoneclass\u2081":6,"tomonoidhom\u2081":6,"toone\u2081":6,"tosemigroup\u2081":6,"tosmul\u2083":6,"true":[1,2,3,6,7],"try":[0,1,2,3,4,5,6,7],"while":[0,1,2,6,7],"x\u2080":[7,8],"x\u2081":[2,3,5,7],"x\u2081a":3,"x\u2082":[2,3,5],"x\u2082a":3,"x\u2082eq":3,"x\u2082na":3,"y\u2080":7,"y\u2081":5,"y\u2082":5,"z\u2080":7,"z\u2081":5,"z\u2082":5,"zsmul\u2081":6,A:[1,2,3,4,5,6,7,8],And:[2,4,6,7],As:[0,1,2,3,4,5,6,7,8,9],At:[0,1,2,4,5,6],Be:[0,1,3],But:[0,1,2,3,4,5,6,7],By:[1,3,5,6],For:[0,1,2,3,4,5,6,7,8,9],If:[0,1,2,3,4,5,6,7],In:[0,1,2,3,4,5,6,7,8,9],It:[0,1,2,3,4,5,6,7,8],Its:[5,6],Not:[1,5,7],Of:[1,2,4,6,7,8,9],On:[1,2,3,5,6,7,9],One:[1,2,3,4,5,6,7],Or:[2,3],Such:[0,1,2,6],That:[0,4,5,6],The:[0,1,4,5,6,7,8,9,11],Their:[7,8],Then:[2,3,5,6,7,9],There:[0,1,2,3,4,6,7,8,9],These:[0,1,3,4,5,8,9],To:[0,1,2,3,4,5,6,7],With:[1,3,4,6,7],_:[0,1,2,3,4,5,6,7,8,9],_add_mod:5,_def:4,_eq:5,_in:7,_inst_1:5,_le:5,_root_:[1,4],a_0:3,a_1:3,a_2:3,a_:7,a_def:3,a_of_b_of_c:1,ab:[2,5],abandon:4,abbrevi:[1,2,3,5],abel:1,abelian:[1,5,6],abgrpmodul:6,abil:0,abl:[0,1,2,3,4,5,6,8],abn:2,about:[0,2,3,4,5,6,7,8,11],abov:[0,1,2,3,4,5,6,7,9],abs_add:[1,2],abs_l:[1,5],abs_lt:2,abs_mod:5,abs_mul:2,abs_nonneg:2,abs_of_neg:2,abs_of_nonneg:[2,5],abs_po:2,abs_zero:2,absa:2,absb:2,absolut:2,absorb1:1,absorb2:1,absorpt:1,abstractli:7,absurd:[2,4],abus:5,ac:5,accept:[0,1,2,7],access:[1,3,5,6,7,9],accessor:5,accommod:5,accompani:5,accord:5,achiev:[5,6,7],acknowledg:0,acpo:2,across:6,act:1,activ:0,actual:[2,3,4,6,7],ad:[1,2,3,4,5,6,7],adapt:5,add:[2,4,5,6,7,8],add_assoc:[1,4,5,6],add_comm:[1,4,5,6],add_def:5,add_im:5,add_l:1,add_le_add:[1,2],add_le_add_left:1,add_le_add_right:1,add_left_cancel:1,add_left_inj:2,add_left_neg:[1,5],add_lt_add_left:1,add_lt_add_of_le_of_lt:1,add_lt_add_of_lt_of_l:1,add_lt_add_right:1,add_mul:[1,6],add_mul_mod_self_left:4,add_neg_cancel_right:1,add_nonneg:[1,5],add_one_le_of_lt:5,add_po:1,add_pos_of_pos_of_nonneg:1,add_r:5,add_right_cancel:1,add_right_neg:1,add_smul:6,add_sub:1,add_sub_cancel:4,add_x:5,add_zero:[1,5,6],addalt:5,addalt_comm:5,addalt_x:5,addcommgroup:1,addgroup:[1,5],addgrouppoint:5,addit:[1,2,4,5,6,7,8,9],addmonoid:6,addzeroclass:6,adi:5,adject:6,adopt:1,advantag:[2,3,4,5,8],ae:[7,9],aestronglymeasur:9,affect:6,aforement:7,after:[1,2,4,6,7,8],again:[1,2,3,4,5,6,7],against:2,agre:3,ai:3,aim:4,aka:7,aleb:2,alex:0,algebra:[4,6,7,8,9,11],algebrahom:6,algorithm:5,all:[0,1,2,3,4,5,6,7,8,9],allow:[1,2,3,4,5,6,7,8,9],almost:[5,6,7,9],alon:3,along:[1,4,7],alpha:[2,3],alreadi:[0,1,2,3,4,5,6,7],also:[0,1,2,3,4,5,6,7,8,9],altern:[0,2,3,4,5,6,7],although:[0,3,4,5,6,7],alwai:[0,1,2,3,5,6],ambigu:[1,5],among:4,an:[0,1,2,3,4,5,6,7,8,9],analog:[1,2,3,4,5,7,8],analysi:[0,5,8],ancient:4,and_comm:3,anecdot:6,angl:2,ani:[0,1,2,3,4,5,6,7,8,9],ann:5,annoi:[4,6],annot:[1,2,3,4,5,6],anonym:[2,3,4,5],anoth:[0,1,2,3,4,5,6,7],answer:[0,5,7],antireflex:5,antisymm:3,antisymmetr:2,anyhow:2,anyth:[2,5,7],apart:[5,6],api:1,appeal:[3,6],appear:[0,1,2,5,6,7],appli:[2,3,4,5,6,7,8,9,11],applic:[1,2,4,5,9],appreci:4,approach:[4,5,6,7],appropri:[1,2,3,5,6],approxim:1,ar:[0,1,2,3,4,5,6,7,8,9],arbitrari:[1,2,3,4,5],arbitrarili:[2,7],archetyp:5,argu:6,argument:[1,2,3,4,5,6,7],aris:2,arithmet:1,around:[1,3,6,7,9],arrang:5,arrow:[1,2,6,7],artifici:5,ascii:6,ascript:6,asid:3,ask:[2,4,5,6,7],aspect:[0,5],assembl:7,assert:[2,3,6],assign:[2,3,5,6],assist:[0,2,5],associ:[0,1,2,4,5,6,7,9],assum:[0,1,2,3,4,6,7],assumpt:[0,1,2,3,4,5,7,8,9],assur:5,asymmetri:2,at_top:7,attach:7,attain:7,attempt:6,attent:[1,2,4,6,7],attop:[7,9],attop_basi:7,attr:6,attract:2,attribut:6,auto:6,autom:[0,1,5],automat:[0,1,2,3,4,5,6,7,8],aux:[1,2,4,7],auxiliari:[2,7],avail:[0,1,4,5,6],averag:5,avoid:[1,2,3,4,5,6,8],awai:[2,5],axiom:[1,2,3,5,6,7,9],axiomat:[1,2,3,5],b:[1,2,3,4,5,6,7,8,9],baanen:5,back:[0,1,2,3,5,6,7],background:0,backslash:[1,3],backward:[2,7],bad:[5,6,7],badinst:6,bair:[7,8],balanc:1,ball:[3,8],banach:[8,9],bar:[0,1,2],bare:6,barrier:6,bartosz:0,base:[0,2,3,4,6,7,8],basi:[5,7],basic:[0,2,4,5,7,9,11],baz:1,bbb:[2,5],bc:5,bci:5,bd:5,becaus:[1,2,3,4,5,6,7,8],becom:[1,4,5,6,7],been:[0,1,2,4,5,6,8],befor:[0,1,2,3,4,5,6],begin:[1,2,3,4,5,6],begun:7,behav:[2,3,6,7],behavior:[3,6,7],behind:3,being:[1,3,5,7,8],belong:[5,6,7],below:[0,2,3,4,5,6,7,8,9],beq:2,berman:0,bernstein:11,besid:6,bespok:5,best:0,beta:[2,3],better:[3,4,5,6,7],between:[0,1,2,3,4,5,6,7,8,9],bewar:6,bex:3,bex_def:3,beyond:[2,6,8],bi:[1,5,11],big:[0,5,7,8],bigcup_:3,bigger:[0,3,8],bigoper:[4,5],biject:[3,5],bilinear:9,binari:[1,2,4,5,6],bind:[1,3],binder:6,bipartit:5,bit:[1,2,4,6,7],black:[4,6],block:[1,4],blur:7,bochner:9,boil:6,bold:2,bolt:1,book:[0,2,7],border:7,borelspac:9,boss:7,both:[1,2,3,4,5,6,7,8],bother:[1,3],bottom:[6,7],bound:[1,2,3,4,5,7,8,9],bounded:8,bounded_of_ex_finset:4,bourbaki:7,box:4,bpo:[2,7],bq:5,brace:1,bracket:[1,2,5,6],branch:[2,3,6],breviti:[1,5],bring:[3,4,7],broader:[4,8],broadest:5,brows:[0,1,4],bryan:0,build:[0,2,4,6,7,11],builder:3,built:[0,2,6],builtin:6,bulb:5,bulid:2,bulwi:0,bundl:[5,6,7,8],button:0,by_cas:[2,3,4],by_contra:[2,4],c:[1,2,4,5,6,7,8,9],cach:0,caess:2,calc:[1,2,3,5,7],calcul:[0,2,4,5,11],calculu:[7,9,11],call:[0,1,2,3,4,5,6,7,8,9],can:[0,1,2,3,4,5,6,7,8,9],candid:5,cannot:[2,3,4,5,6,7],canon:[2,3,4,5],cantor:3,cap:3,capabl:5,capit:5,cardin:3,care:[1,2,3,5],carneiro:0,carri:[0,1,2,3,4,5,6,7,9],carrier:[1,5,6],categor:7,categori:[5,7,8],cauchi:7,cauchyseq:7,cauchyseq_iff:7,cauchyseq_of_le_geometric_two:7,cauchyseq_tendsto_of_complet:7,cdist:7,cdot:5,center:[0,7],central:[0,4],centuri:3,ceq:2,certain:[2,6,7],certifi:0,cha:0,chain:5,challeng:[0,1,2,3,5,8],chanc:2,chang:[0,1,2,4,5,7,9],chapter:[0,1,2,3,4,5,6,7,8],charact:[1,3,6],character:[1,3,4,7,8],chat:0,cheat:[0,1],check:[0,1,2,3,4,5,6,7],checksynthord:6,chen:0,chestnut:2,choic:[1,2,3,5,7],choos:[0,2,3,4,5,6,7],choose_spec:3,chose:6,chosen:[2,5],circ:[3,5],claim:7,clarifi:5,clash:1,classic:[2,3,4],claus:6,clean:[2,7],clear:[1,2,4,5,6],clearer:[1,3,5],clearli:7,clever:1,click:[0,1,3,4,5,6],clock:0,clone:0,close:[1,2,3,6,8,9],closed_nhds_basi:7,closedbal:7,closer:[2,7],closur:7,cloud:0,clunki:7,cluster:7,clusterpt:7,cmd:[1,2],co:2,cocki:1,code:[0,1,2,3,5,6],codomain:[2,4,7],coe:6,coe_inject:6,coe_natab:5,coe_natabs_norm:5,coeffici:5,coefun:6,coerc:6,coercion:[5,6,7,8],coincid:[4,5,7],coinduc:7,coinduced_compos:7,coinduced_le_iff_le_induc:7,collect:[1,2,3,5,7,9],collis:6,colon:2,com:0,comap:7,comap_comap:7,combin:[1,2,5,6,7],come:[0,1,2,3,4,5,6,7],comfort:0,comma:1,command:[0,1,2,3,4,5,6],commelin:0,comment:[0,4],commgroup:1,commmonoid:6,common:[1,2,3,4,5,7],commonli:[4,5],commr:[1,2,5],commun:[0,4],commut:[1,2,3,4,5,6,8],comp:7,compact:9,compactspac:7,compani:2,companion:[0,1],compar:[0,5,6,7],comparison:6,compat:[1,7],compil:0,compl:9,complain:1,complement:[3,7,9],complementari:0,complet:[0,1,2,3,4,6,8],completespac:[7,8,9],complex:[0,1,2,4,5,8,9],complic:[1,2,6],compon:[2,3,5,7,9],compos:[3,5,7],composit:[2,3,5,6,7],compound:[1,2,7],compress:[0,1,7],comput:[0,2,3,4,5,8,9],computation:4,concentr:3,concept:[5,7,8],conceptu:3,concis:[1,5],conclud:[2,8],conclus:[1,2,4],concret:[1,2,4,5,6,7],condens:3,condit:[3,4,6,7,8],confid:3,configur:5,confirm:[1,2,3,4],confus:[3,4,6,7],congr:2,congratul:[1,2,4],congruent:4,conj:5,conj_im:5,conj_r:5,conjug:5,conjunct:[6,11],connect:[1,3,5,7],consid:[1,2,3,4,5,6,7,8,9],consist:[1,3,5,6,7,8],constant:[1,2,9],constitut:1,constraint:[5,7],construct:[0,2,3,4,5,6,7],constructor:[2,3,4,5,6],consult:5,cont:8,cont_diff:8,contain:[0,2,3,4,5,6,7,8,9],contdiff:8,contdiff_iff_continuous_differenti:8,contdiffat:8,contend:4,content:[0,1,2,4,7],context:[1,2,4,5,6,7,8,9],contextu:5,continu:[0,1,4,5,6,9],continuous_def:7,continuous_dist:7,continuous_fst:7,continuous_id:[6,7],continuous_iff:7,continuous_iff_coinduced_l:7,continuous_linear_map:8,continuous_pow:7,continuous_snd:7,continuousat:[7,9],continuousat_extend:7,continuousat_iff:7,continuouslinearmap:8,continuouson:[7,8],continuum:2,contract:2,contradict:[2,3,4],contradictori:2,contrapos:[2,3,4],contrari:2,contrast:[2,3,5,6,7],contravari:7,contribut:[0,3],control:2,conveni:[1,2,3,5,6,7],convent:[1,5,9],convention:7,converg:[9,11],convergesto:2,convergesto_add:2,convergesto_const:2,convergesto_mul:2,convergesto_mul_const:2,convergesto_uniqu:2,convers:[0,2,4,7],convert:[2,4],convinc:5,convolut:9,copi:[0,3,4,6,7],coprim:4,coprime_mn:4,core:[0,4,5],correct:[0,1],correctli:3,correspond:[0,1,2,3,4,5,6,7,8],could:[0,1,2,4,5,6,7],count_factors_mul_of_po:4,countabl:9,counterexampl:[2,8],counterpart:5,coupl:[1,2,6,7],cours:[1,2,4,6,7,8,9],covari:7,cover:[0,1,3,6,7,8],creat:[0,1,6],creativ:5,criterion:7,crucial:7,crude:4,cryptic:2,cs:2,ct:2,ctrl:[0,1,2,4,5],cue:5,cup:3,curiou:[1,6],curli:[1,2],current:[0,1,2,6],curri:1,cursor:[0,1,2],curv:0,custom:5,cut:4,d:[1,2,4,5,8],dai:3,danger:[4,5],data:[1,2,4,5,6,7],databas:[3,4,6,7],datatyp:4,deal:[1,2,3,4,5,7],dealt:2,decid:[4,7],decidableeq:4,decidablepr:4,decis:4,declar:[0,1,4,5,6],decompos:[0,3,5],decreas:[1,5],dedekind:3,deduc:[6,7],def:[0,2,3,4,5,6,7],defect:[2,6,7],defin:[1,2,3,4,6,7,8,9,11],definit:[0,1,2,3,4,5,6,7,8,9],definition:[1,4,5,6,7],delet:[1,2,3,4],delic:3,delimit:1,demonstr:[6,7],denomin:[2,4,5],denot:[1,3,4,6,7],dens:7,denseinduc:7,densiti:7,depend:[0,2,3,4,5,6,7],deriv:[1,2,4,8,9],deriv_add:8,deriv_eq_zero:8,deriv_zero_of_not_differentiableat:8,descend:6,describ:[0,1,2,3,4,5,6,7],descript:[0,1,2,4,7],deserv:4,design:[0,1,2,3,5,7],desir:[1,3,6,7],destruct:2,destructur:6,det:9,detail:[1,2,3,4,5,6],detect:2,determin:[1,5,7],develop:[0,1,4,9],devic:6,devot:7,di:[2,5],dia:6,dia_assoc:6,dia_inv:6,dia_on:6,diagram:3,diamond:6,dictionari:1,did:[0,2,6,7],dif_neg:3,dif_po:3,diff_eq:3,differ:[0,1,2,3,4,5,6,7,8],differenti:[9,11],differentiable_at:8,differentiableat:8,differentiableon:8,difficult:[2,6],digress:7,dimension:[8,9],direct:[1,2,3,6,7,8],directli:[2,4,5,6,7],discret:[5,8],discuss:[1,2,4,5,6,7,8],dishwash:0,disjoint:[3,9],disjunct:[1,3,11],dispens:4,displai:[0,1,2,6],dispos:2,dist:[1,7],dist_comm:[1,7],dist_eq_zero:7,dist_le_range_sum_dist:7,dist_nonneg:[1,7],dist_self:1,dist_triangl:[1,7],distanc:[1,2,7,8],distinct:[0,2,3,4,5,7],distinguish:[0,5,6,7,8],distract:6,distriblattic:1,distribut:[1,4,5,6],div:5,div_def:5,div_dvd_of_dvd:4,div_eq_mul_inv:5,div_eq_of_eq_mul_right:4,div_lt_self:4,div_nonneg:5,div_po:2,divab:2,divac:2,divbc:2,dive:0,divid:[1,2,4,5],divis:[1,2,4,5,6],divisor:[1,2,4,5],document:[0,1,3,4,6],doe:[0,1,2,3,4,5,6,7,8],doesn:[1,2,7],domain:[1,2,3,4,5,7],domin:9,don:[0,1,2,3,4,5,6,7,9],done:[0,2,3,4,6,7],dot:[1,7],doubl:[2,3],doubt:0,down:[0,3,4,6,7],dozen:3,draw:[1,5,6],drop:2,dsimp:[2,3,4,5],dual:[5,7],dualli:7,due:[1,3,6],duplic:6,dvd:1,dvd_add_iff_left:4,dvd_antisymm:1,dvd_fac:4,dvd_factori:4,dvd_gcd:4,dvd_gcd_iff:2,dvd_iff_exists_eq_mul_left:4,dvd_mul:4,dvd_mul_left:1,dvd_mul_of_dvd_left:1,dvd_mul_of_dvd_right:4,dvd_mul_right:[2,4],dvd_of_dvd_pow:4,dvd_prod_of_mem:4,dvd_rfl:4,dvd_sub:4,dvd_tran:1,dwell:3,e:[1,2,3,4,5,6,7,8,9],each:[0,1,2,3,4,5,6,7,8],earlier:1,easi:[0,4,5,6,7],easier:[0,1,3,4,6,7],easiest:[2,4],easili:[1,4,5,6],ebner:0,edit:0,editor:[0,1],ediv_add_emod:5,ediv_lt_of_lt_mul:5,ediv_mul_l:5,ef:2,effect:[1,3,6,7],effici:[5,7],effort:[1,4],eg:2,eight:7,either:[1,2,3,5,6,7],elabor:7,elan:0,ele1:2,eleg:5,element:[1,2,3,4,5,6,7,8,9],elementari:[0,3,5,7,11],elim:2,elim_finite_subcov:7,elimin:1,els:[2,3,4],em:[2,3],emb:5,embark:6,emetricspac:7,emod_lt:5,emod_lt_of_po:5,emod_nonneg:5,emphas:6,emphasi:[0,6],empti:[3,4,5,7,9],enabl:[2,3,4,5],enat:4,encapsul:[3,5,8],encod:9,encount:[4,6],encourag:[0,1,2,3,4,5],end:[1,2,3,4,5,6,7,8],endow:6,engin:4,enjoi:[2,3,4,7],ennreal:9,enough:[0,1,2,3,4,6,7],ensur:[6,7],enter:[0,1,2,3,7],enthusiast:0,entir:[1,3,5,7,8],entourag:7,entri:[0,5],enumer:[1,2],epo:2,eq1:4,eq2:4,eq:[3,5],eq_empty_or_nonempti:7,eq_neg_of_add_eq_zero:1,eq_of_dvd_of_prim:4,eq_one_or_self_of_dvd:4,eq_two_or_odd:3,eq_univ:3,eq_univ_of_foral:3,eq_zero_or_eq_zero_of_mul_eq_zero:2,equal:[1,2,3,4,5,6,7,9],equat:[1,2,3,4,5],equilater:5,equip:[1,3,5,6,7,8,9],equiv:5,equival:[1,2,3,4,5,7,8,9],eras:4,error:[1,2,3,6],erw:2,especi:[1,2,5,6,7],essenti:[2,3,5,7],establish:[0,1,2,3,4,5],etc:[5,7],euclidean:5,euclideandomain:5,ev:8,eval:0,even:[0,1,2,3,4,5,6,7,8,9],even_iff:3,even_of_even_sqr:4,eventu:[2,3,7],eventually_eq:7,eventually_eventually_nhd:7,eventually_left_invers:8,eventually_of_foral:7,eventually_right_invers:8,ever:[0,7],everi:[0,1,2,3,4,5,6,7,8,9],everyth:[1,2,6,7],everywher:[2,3,6,7,9],evid:5,evolv:1,ex:[0,2],ex_finset_of_bound:4,exact:[1,2,3,4,5,7],exactli:[1,2,3,5,6,7],exampl:[0,2,3,4,5,6,7,8,9,11],except:[1,2,5],exclam:7,exclud:[2,4],execut:0,exercis:[0,1,2,3,5,6,7,8],exfalso:2,exhibit:[2,7],exist:[1,2,3,6,7],existenti:[3,11],exists_abs_le_of_convergesto:2,exists_deriv_eq_slop:8,exists_deriv_eq_zero:8,exists_forall_g:7,exists_forall_l:7,exists_infinite_prim:3,exists_one_lt_norm:8,exists_prime_and_dvd:3,exists_prime_factor:4,exists_prime_factor_mod_4_eq_3:4,exot:7,exp:[1,3],exp_le_exp:1,exp_log:3,exp_lt_exp:1,exp_po:[1,3],expand:[1,2,3,4,5],expect:[1,2,3,4,5,6,7],expend:6,experi:[0,1,7],explain:[1,2,3,4,5,6,7,9],explan:[0,7],explicit:[1,2,5,6,7],explicitli:[1,2,3,5,6,7,8],explor:[4,7],expon:1,exponenti:4,expos:[2,7],express:[0,1,2,3,4,5,6,7,8,9],ext:[2,3,4,5,6],ext_iff:5,extend:[1,3,4,5,6,7,9],extens:[0,1,6,7,8],extension:[3,5],extra:[1,2,3,5,6,7],extract:[2,7],extrem:[0,6,7],f:[0,1,2,3,4,5,6,7,8,9],f_:7,f_cont:7,f_le:7,f_ne:7,fac:4,fac_po:4,face:[5,6,7],facilit:[2,7],fact:[0,2,3,4,5,6,7,8,9,11],factor:[4,5],factori:4,factorial_po:4,factorization_mul:4,factorization_pow:4,factors_uniqu:4,fail:[1,2,3,4,5,6,7,9],failur:6,fairli:2,fall:3,fals:[1,2,3,4,6],falso:2,famili:[7,8],familiar:[0,1,4,5,7,8],famou:3,far:[2,3,6,7],favor:[1,5],fderiv:8,fear:6,feat:4,featur:[0,2,4],feedback:0,feel:[0,1,2,6,7],fermatlasttheorem:0,fetch:0,few:[1,2,3,4,7],field:[0,1,5,6,8],field_simp:[2,5],figur:[0,1,2,5],file:[0,1,4,5,6,7],fill:[2,3,4,5],filter:[4,8,9,11],filter_upward:7,filteri:7,fin:[5,9],find:[0,1,2,4,5,6,7],finicki:1,finish:[1,2,3,4],finit:[1,3,4,5,7,8,9],finitedimension:[8,9],finset:[4,5,7],fintyp:7,first:[0,1,2,3,4,5,6,7,8,9],firstcountabletopolog:7,fix:[4,6,7],fixm:5,flag:[2,3],flexibl:7,fn_ub_add:2,fneven:2,fnhaslb:2,fnhasub:2,fnlb:2,fnodd:2,fnub:2,fnub_add:2,fnuba:2,focu:[0,1,7,9],focus:7,folder:0,follow:[0,1,2,3,4,5,6,7,8,9],foo:[1,3,5],forc:[1,2,3],foreshadow:1,forewarn:0,forget:6,form:[0,1,2,3,4,5,6,7,9],formal:[0,1,2,3,4,5,6,7,8],format:1,former:5,formul:[4,7],formula:9,forth:5,fortiori:7,fortun:3,forward:[1,2,5,7],found:[1,5,8],foundat:[2,3,4,5],four:[2,5],fourth:[1,2],frac:5,fraction:4,fraenkel:2,framework:0,free:[0,1,7],freeli:4,frequent:7,friend:[2,5],from:[0,1,2,3,4,5,6,7,8,9],front:2,frustrat:[0,6],fst:[5,7],fubini:9,full:[1,2,3,4,5,6,7],fulli:[3,7],fun:[0,2,3,4,5,6,7,8,9],functori:7,fundament:[0,4,5,6,9],funlik:6,funni:7,further:[1,7],fx:3,fxeq:3,g:[1,2,3,5,6,7,8,9],g_1:5,g_2:5,g_3:5,g_:7,gabriel:0,gadget:[2,7],gain:6,galoi:[3,5,7],game:[0,6],gaussian:[2,11],gaussianint:5,gaussint:5,gave:7,gcd:[1,2,4],gcd_zero_left:1,gcd_zero_right:1,gcongr:5,ge:[0,2,5],gener:[1,2,3,4,5,6,7,8,9],genuin:2,geometr:7,get:[1,2,3,4,6,7,8,11],gin:0,giovanni:0,git:0,github:[0,1],gitpod:0,give:[1,2,3,4,6,7,9],given:[0,1,2,3,4,5,6,7],glb:1,global:7,go:[0,1,2,3,4,6,7],goal:[0,1,2,3,4,5,7],goe:[3,4,5,6,7],good:[1,2,3,4,5,6,7],got:6,govern:[1,5],gradual:[6,7],graph:5,grate:[0,5],great:[1,5],greater:[0,1,2,3,4,7],greatest:[1,5,7],greek:[1,4],group:[0,1,2,3,5,6,7,8],groupcat:5,grouptheori:5,grow:[0,6],grp:5,guai:0,guarante:[0,3,5],guess:[1,2,3,4,5],guilherm:0,gya:3,h0:4,h1:[1,3,4,5],h2:[1,3,5],h3:1,h:[1,2,3,4,5,6,7,8,9],h_def:3,h_inj:9,ha:[0,1,2,3,4,5,6,7,8,9],hab:8,habit:6,hac:6,hack:3,had:[1,6],hal:6,half:3,hand:[1,2,3,4,5,6,7],handi:4,handl:[1,3,4,6],happen:[1,6,7],happi:0,hard:[0,1,3,5,6],harder:2,harm:3,has_basi:7,hasbasi:7,hasderivat:[8,9],hasderivat_sin:8,hasfderivat:8,hasfderivatfilt:8,hasfderivwithinat:[8,9],haskel:1,hasmul:5,hasquoti:6,hasstrictfderivat:8,hausdorff:7,have:[0,1,2,3,4,5,6,7,8,9],haven:[0,2,6,7],hb:[2,7],hba:6,hball:7,hbound:9,hc:8,hd:7,hdi:9,headach:4,headi:5,heart:4,heather:5,heaven:5,heavier:6,heavili:[3,7],hello:0,help:[0,1,2,3,4,5,6,7],helper:1,henc:[0,2,3,4,5,6,7,8],here:[0,1,2,3,4,5,6,7,8,9],hesit:4,hf:[3,7,8,9],hfa:2,hfb:2,hfc:8,hff:8,hfi:8,hfx:7,hg:[3,7,8,9],hgb:2,hidden:2,hide:[6,7],hierarchi:[5,11],high:2,higher:6,highlight:[0,2],hint:[0,1,2,9],histor:1,hit:[0,1],hk:[0,8],hle:7,hlim:9,hm:[4,8],hmea:9,hmn:0,hmp:8,hn:[3,4,7,8],hna:2,hnb:2,hne:7,ho:7,hold:[1,2,3,4,5,7,9],home:[4,5],hood:[3,5],hope:0,hopelessli:6,hoskinson:0,hover:[0,1,2,3,4,5],how:[0,1,2,3,4,5,6,7,9],howev:[1,2,5,6,7,8],hp:7,hpo:7,hq:7,hr:7,hs:[2,4,7,9],hsu:7,ht:2,html:0,http:[0,6],hu:[7,8],huge:6,hum:7,human:1,hunt:6,hunter:0,huo:7,hurdl:6,hurt:2,hux:7,hw:6,hx:[2,3,5,6,8],hxeq:3,hy:[5,6],hyp:1,hypothes:[1,2,3,4,5],hypothesi:[0,1,2,3,4],hz:[5,6],i:[2,3,4,5,7,8,9],icc:[7,8],ici:7,id:[4,6,7,8],idea:[1,2,3,5,6,7],ident:[3,4,5,6,7,11],identifi:[1,2,4],ie:[6,7],if_neg:3,if_po:3,iff:[1,3,7,8,9],ignor:[0,7],ih:4,iinter:9,il:4,illustr:[1,2,3,4,5],im:5,imag:[3,4,6,7],image_subset_iff:3,imagin:1,imaginari:5,immedi:[2,3,5,6],implement:[2,5,6,8],impli:[1,2,3,4,5,7],implic:[1,7,11],implicit:[1,2,5,6,7,8],implicitli:[1,2],importantli:6,imposs:1,impress:0,improv:[3,4],incl:7,includ:[0,1,2,3,4,6,7,8],inclus:[1,3,7],inconsist:1,inconveni:8,incorpor:6,increas:1,increment:[0,1],inde:[1,5,6,7,8],indefinit:4,indent:1,independ:[2,3,5],index:[3,6,7],indic:[1,2,3,5,6],indirect:6,indirectli:1,individu:1,induc:7,induced_compos:7,induct:[7,11],induction_on:4,inequ:[1,2,6,7],inf:[1,6,7],inf_assoc:1,inf_comm:1,inf_le_left:[1,7],inf_le_right:1,inf_sup_left:1,inf_sup_right:1,inf_sup_self:1,infer:[1,2,3,5,6],infer_inst:[8,9],inferenti:0,inferr:6,infimum:[1,6,7,9],infin:[4,7,9],infinit:[3,7,11],infix:[1,6],infixl:6,infixr:6,info:6,inform:[0,1,2,3,5,6,7],infoview:1,infrastructur:0,infti:8,ingredi:[3,5,7,8],inhabit:[3,5,7],inherit:[5,6],inherit_doc:6,inj:4,inject:[2,3,4,6,7],injf:[2,3],injg:2,injon:[3,9],inl:[2,3],inner:3,input:[1,3,7],inr:[2,3],inria:6,inscrut:[2,3],insert:[0,2,4,5,7,8],insid:[0,1,2,3],insight:2,insist:[1,6],inspect:1,inspir:2,inst:6,inst_1:6,instal:[0,6],instanc:[1,2,3,4,5,6,7,8],instanti:[2,5,6,7],instcommr:5,instead:[0,1,2,3,4,5,6,7],instruct:[0,1,2,7],intact:0,integ:[1,2,4,6,11],integr:[2,8,11],integral_add:9,integral_eq_sub_of_hasderivat:9,integral_hasstrictderivat_right:9,integral_id:9,integral_image_eq_integral_abs_det_fderiv_smul:9,integral_one_div:9,integral_prod:9,intend:[0,1,2,5],inter_def:3,inter_set:7,interact:[0,5,6,9],interchang:1,interconnect:5,interest:[1,2,3,5,6,7],interestingli:[5,8],interfac:5,interior:[5,8],interior_inter_subset:8,interior_subset:8,intermedi:[6,7],intern:[2,5],interpret:[0,1,4,5,7],intersect:[1,3,5,6,7,9],interv:[4,7,9],interval_cas:4,intervalintegr:9,intro:[0,1,2,3,4,5,6,7],introduc:[0,1,2,3,4,7,9],introduct:[1,2,7,11],introductori:8,intuit:[3,7],inv:[5,6],inv_dia:6,inv_eq_of_dia:6,inv_eq_of_mul:6,inv_fun:3,inv_fun_eq:3,inv_mul:6,invari:9,invers:[1,3,5,6,8,9],inverse_spec:3,invert:6,invest:5,invfun:[3,5],invfun_eq:3,invis:[5,6],invok:[0,1,7],involv:[1,2,4,5,6,7],inward:2,ioo:[7,8],ipo:4,irrat:11,irration:4,irreduc:[4,5],irreducible_iff_prim:5,irreflex:2,is_addit:5,is_closed_l:8,is_open:7,isaddhaarmeasur:9,isbigo_iff_isbigowith:8,isbigowith:8,isbigowith_iff:8,isclos:[7,8],isclosed_l:7,iscompact:7,iscompact_icc:7,iscompact_univ:7,isdomain:2,iseqv:6,islinear:5,islittleo_iff_forall_isbigowith:8,islocalmin:8,isn:[0,2,3,4,6],isomorph:[5,8],isopen:7,isopen_compl_iff:7,isopen_empti:7,isopen_iff:7,isopen_iint:7,isopen_iunion:7,isopen_univ:7,isrorc:8,issu:[4,5,6,7],item:7,iter:8,iteratedfderiv:8,its:[0,1,2,3,4,5,6,7,8,9],itself:[0,2,3,5,6,7,8],iunion:9,j:[3,5],job:1,johan:0,join:[0,1,5],journei:7,juggl:6,julian:0,jump:[1,4,5,7],just:[0,1,2,3,4,5,6,7],justif:[1,2],justifi:[0,1,2,7],k:[0,2,4,5,7,8],keep:[1,5,6],kei:[1,4,5,7],keyboard:1,keyword:[1,2,4,5],kind:[0,1,6,7],knew:7,know:[0,1,2,3,4,5,6,7,8],known:[0,1,2,3,4,5,6,7,8],l:[0,1,8,9],label:[1,2],lake:0,lambda:[2,5],lambda_l:5,lambda_nonneg:5,languag:[0,1,2,3],larg:[0,6,7],larger:[1,7],last:[1,2,3,4,5,6,7],later:[0,1,2,4,5,6,7],latter:[5,7],lattic:[1,5,6,7],law:1,layer:[6,7],lbf:2,lbg:2,lcm:1,lcm_zero_left:1,lcm_zero_right:1,ldot:[2,3,4],le:[1,5,6],le_abs_self:2,le_antisymm:[1,2],le_iff_exists_add:7,le_inf:1,le_inf_iff:7,le_min:1,le_mul_of_one_le_right:5,le_of_dvd:4,le_of_l:6,le_of_max_le_left:2,le_of_max_le_right:2,le_of_mul_le_mul_right:5,le_of_not_gt:2,le_op_norm:8,le_or_gt:2,le_principal_iff:7,le_refl:[1,2],le_sup:4,le_sup_left:1,le_sup_right:1,le_tran:[1,2],lead:[1,2,4,5,6,7],leader:1,lean4:1,lean:[0,1,2,3,4,5,6,7,8],leanprov:0,learn:[0,1,4,5],least:[1,5,6,7],leav:[0,1,2,3,5,6],lebesgu:9,led:6,left:[0,1,2,3,4,5,6,7,8,9],left_distrib:[5,6],left_inv:5,left_inv_eq_right_inv:6,left_neg_eq_right_neg:6,leftinvers:3,leftinverse_invfun:3,legal:1,lemma:[2,4,5,6,7,8,9,11],less:[1,2,3,4,5,6,7],let:[0,1,2,3,4,5,6,7,8,9],letter:[1,5,8],level:[1,2,6],leverag:7,librari:[0,1,2,3,4,5,7,8],life:[0,2],light:5,like:[0,1,2,3,4,5,6,7],lim_:7,limit:[2,6,7],linarith:[1,2,4,5],line:[0,1,2,3,4,6],linear:[1,2,5,7],linearord:2,linearorderedr:5,liner:0,linf:5,link:[5,6],list:[1,2,3,4,5],littl:[1,2,7,8],live:[0,5],ll:[0,2,4,6,7],local:[1,2,6,7,8],localinvers:8,log:[1,3,9],log_le_log:1,log_lt_log:1,logic:[0,1,3,4,5,11],logician:1,longer:[0,4,5],look:[1,2,3,4,6,7],loop:4,loss:4,lot:[0,3,5,6,7],loud:1,lower:[1,2,4],lowest:4,lr:1,lt_ab:2,lt_asymm:2,lt_iff_le_and_n:1,lt_iff_le_not_l:2,lt_irrefl:[1,2],lt_of_le_of_lt:[1,2],lt_of_lt_of_l:1,lt_of_not_g:2,lt_succ_iff:4,lt_succ_of_l:4,lt_tran:[1,2],lt_trichotomi:2,lub:1,m:[0,1,2,4,6,7,8],m_iunion:9,mac:[1,2],macbeth:5,machineri:[5,6,7],made:[1,2,3,5,7],magic:[2,5,6],mai:[0,1,2,3,5,6,7,8],main:[2,6,7,8],maintain:1,make:[0,1,2,3,4,5,6,7,8],manag:[0,1,4,5,7],mani:[1,2,3,5,6,7,8,9,11],manifest:[1,7],manipul:[2,5,7],manner:[2,5],manual:[0,3,4],map:[1,2,3,5,6,7],map_add:[6,8],map_eq:7,map_inv_of_inv:6,map_le_iff_le_comap:7,map_map:7,map_mono:7,map_mul:6,map_on:6,map_smul:8,map_zero:6,mapsto:[1,5],mario:0,mark:[1,2,6,7],marker:2,marriag:5,mascellani:0,mass:9,master:[0,1,4],match:[1,2,5],mathbb:[3,4,5],mathcal:[5,8],mathemat:[0,1,2,3,4,5,6,7],mathematician:[4,7],mathematics_in_lean:0,mathieu:0,mathlib:[0,1,2,3,4,5,6,7,8,9],matric:[1,5],matter:[1,2],max:[1,2,6,7,9],maximum:[2,4,7],mayb:6,mdvdn:4,mean:[1,2,3,4,5,6,7,8,9],meaningless:2,meant:[0,2,6],meanwhil:[1,4],measur:[0,5,7,8,11],measurableset:9,measurablespac:9,measure_eq_iinf:9,measure_iunion_l:9,measuretheori:9,mechan:[1,2,5],mediat:4,meet:[1,2,3,5],mem:3,mem_:4,mem_ball_self:7,mem_closedball_self:7,mem_closure_iff:7,mem_closure_iff_clusterpt:7,mem_closure_iff_nhds_basi:7,mem_closure_iff_seq_limit:7,mem_closure_of_tendsto:7,mem_diff:3,mem_eras:4,mem_filt:4,mem_iff:7,mem_iint:3,mem_image_of_mem:3,mem_insert:4,mem_int:4,mem_inter_iff:3,mem_iunion:3,mem_nhds_iff:7,mem_of_dvd_prod_prim:4,mem_of_tendsto:7,mem_sdiff:4,mem_setof:3,mem_union:[3,4],member:[3,7],membership:[3,4,6],mention:[2,3,5,6,7],menu:[0,1],meq:4,messag:6,messi:5,meta:[2,6],metavari:6,method:[0,2,3,4,5],metric:[1,5,8,11],metricspac:[1,7,8],mf:2,mg:2,mge2:4,mgt2:4,mid:5,middl:[0,1,2,7],midpoint:5,might:[1,2,3,4,5],mil:0,min:[1,2,7,9],min_le_left:1,min_le_right:1,mind:[1,2,5,6],minfac:4,minimum:7,minor:[6,8],miss:[1,3,4],mission:0,mk:[5,6,7],mk_of_nhd:7,mltn:4,mne1:4,mnez:4,mod:5,mod_4_eq_3_or_mod_4_eq_3:4,mod_def:5,mod_lt:4,mode:[1,2,5],model:[3,7],modern:5,modifi:6,modu:1,modul:6,modular:1,modulo:[1,4,5],moment:[1,2,5],mono:7,monof:2,monoid:[2,3,4,6],monoidhomclass:6,monoton:[2,6,7],monro:0,monticon:0,moral:[0,5],more:[0,2,3,4,5,6,7,8,11],moreov:[0,1,4,5,7],morphism:[5,8,11],morrison:0,most:[1,2,3,4,5,6,7,9],motiv:2,move:[0,1,2,6,7],mp:[1,2,3,4,7],mpr:[1,2,5,7],much:[0,2,4,6,7,8],mul:[4,5,6,7],mul_add:[0,1,4,6],mul_assoc:[1,2,4,5,6],mul_comm:[1,2,4,5,6],mul_def:5,mul_div_cancel:[2,4],mul_im:5,mul_inv:6,mul_inv_cancel_right:5,mul_inv_rev:1,mul_le_mul:2,mul_left_comm:[0,4],mul_left_inv:[1,5],mul_left_not_lt:5,mul_lt_mul_right:2,mul_mem:6,mul_mod:4,mul_mod_right:4,mul_nonneg:1,mul_on:[1,5,6],mul_po:[1,4],mul_r:5,mul_right_inj:4,mul_right_inv:[1,5],mul_smul:6,mul_sub:1,mul_sum:5,mul_zero:[1,5,6],muloneclass:6,multilinear:8,multipl:[1,2,3,4,5,6,8],multipli:5,mulzeroclass:6,mundan:2,must:[1,5,6,7],my_fil:0,my_lemma2:2,my_lemma3:2,my_lemma4:2,my_lemma:2,my_squar:5,myab:2,mynat:4,mypoint1:5,mypoint2:5,mypoint3:5,myre:1,mysmul:6,mysquar:5,mysteri:[5,6],mz:4,n:[0,1,2,3,4,5,6,7,8,9],n_p:7,n_q:7,na:2,naiv:[6,7],name:[1,2,3,4,5,6,7,8],namespac:[1,2,3,4,5,7],nash:0,nat:[0,1,2,3,4,5,7],natab:5,natabs_mul:5,natabs_norm_mod_lt:5,natabs_of_nonneg:5,natur:[0,1,2,3,4,5,6,7,8],navig:0,nb:2,ne:[4,5],nearbi:[1,4],nearest:5,nebot:7,nebot_of_l:7,necessari:[0,2,4,5],necessarili:[1,9],need:[0,1,2,3,4,5,6,7],neg:[5,6,7,9],neg_add:6,neg_add_cancel_left:1,neg_def:5,neg_eq_of_add_eq_zero:1,neg_im:5,neg_le_abs_self:2,neg_neg:1,neg_r:5,neg_zero:1,negat:[1,5,11],negsucc:6,neighborhood:7,neither:[3,5,6],neq:4,nest:[1,2],net:1,neutral:6,never:[0,6],newcom:0,next:[0,1,2,3,4,5,6,7,8],nge:2,nhd:7,nhds_basis_bal:7,nhds_basis_closedbal:7,nhds_basis_ioo_po:7,nhds_basis_open:7,nhds_induc:7,nhds_mk_of_nhd:7,nhds_prod_eq:7,nice:[1,2,4,6,7],nicer:[5,7],nineteenth:3,nna:2,nnc:2,nnez:4,nnf:2,nng:2,nnz:4,non:[1,3,6,7,8,9],noncomm_r:1,noncomput:[3,5],nondecreas:[2,4],nondiscret:8,nondistribut:1,nonempti:[3,7],nonempty_interior_of_union_of_clos:8,nonexist:2,nonneg:[1,5],nonneg_of_mul_nonneg_left:1,nontrivi:[2,3,4,5,7],nontriviallynormedfield:[8,9],nonzero:[2,4,5,9],nor:[3,5],norm:[2,5,7,11],norm_add_l:8,norm_conj:5,norm_eq_zero:[5,8],norm_mod_lt:5,norm_mul:[5,8],norm_nonneg:[5,8],norm_num:[1,2,4,5],norm_po:5,norm_smul:8,norm_y_po:5,normed_add_group:8,normed_spac:8,normedaddcommgroup:[8,9],normedfield:8,normedgroup:8,normedspac:[8,9],not_imp_self:3,not_le_of_gt:2,not_lt_of_g:[2,4,5],not_monotone_iff:2,not_norm_mul_left_lt_norm:5,not_not:2,notat:[1,2,3,4,5,6,7,8,9],note:[1,2,4,5,6,7,9],noth:[1,2,3,4,5,6],notic:[1,2,3,4,5,7],notin:3,notion:[1,2,3,4,5,7,8,9],noun:6,now:[0,1,2,3,4,5,6,7,8,9],np:4,npow_nz:4,npowz:4,ns:2,nsmul:6,nsmul_succ:6,nsmul_zero:6,nsqr_nez:4,nt:2,nth_rewrit:1,nth_rw:1,number:[0,1,2,3,5,6,7,8,11],numer:[1,4,5],nut:1,o:8,obfusc:7,object:[0,1,2,3,4,5,11],observ:[2,4,7],obtain:[1,2,4,5,7,8],obviou:[0,4,5,6],occasion:7,occur:4,occurr:1,odd:[1,2,3,4],of_le_succ:4,of_map:7,off:[2,3,4],offend:6,offer:[0,2,5,7],ofnat:6,ofnat_l:5,ofnat_lt:5,often:[0,1,2,3,4,5,6,7],og:2,old:[2,5,6],oliv:0,omit:5,onc:[1,2,3,4,5,6,7,9],one:[0,1,2,3,4,5,6,7,8,9],one_add_one_eq_two:1,one_def:5,one_dia:6,one_im:5,one_mem:6,one_mul:[1,2,5,6],one_r:5,one_smul:6,oner:1,ones:[0,1,2,3,5,9],onli:[0,1,2,3,4,5,6,7,8,9],onlin:0,op_norm_le_bound:8,op_norm_le_of_shel:8,open:[0,1,2,3,4,5,8,9],oper:[1,2,3,4,5,6,7,8],opportun:7,opposit:[6,7],optim:[6,9],option:[1,2,4,5,6,7],order:[1,2,3,4,5,6,7,8],orderedcanceladdcommmonoid:2,orderpreshom:6,orderpreshomclass:6,orderpresmonoidhom:6,ordinari:[1,2,4,5,7],ordinarili:[4,5],organ:0,organiz:1,orient:5,origin:[0,1,5],other:[0,1,2,3,4,5,6,7],otherwis:[1,2,3,4,5],our:[0,1,2,3,4,5,6,7,9],ourselv:[4,6],out:[0,1,2,3,4,5,6,7],outer:1,outermost:3,outlin:[1,2,4,7],outparam:6,output:1,outsid:[1,4],over:[0,1,2,3,4,5,6,7,8],overlap:6,overload:3,overview:11,own:[0,1,4,5,6],p4:4,p4eq:4,p:[0,1,2,3,4,5,6,7,9],p_1:4,p_i:[4,7],p_k:4,p_n:4,page:[0,1,4],pai:[1,2,6,7],pair:[1,2,4,5,7],pairwis:9,panel:0,paper:[2,3,5,7,9],paquet:0,paradox:7,paragraph:7,paramet:[5,6],parent:6,parenthes:[1,2,3,4],pariti:[0,4],parity_simp:0,pars:[1,3],part:[1,2,3,4,5,6,7,9],partial:[0,1,2,3,5,6],partialord:[1,2],particular:[1,2,5,6,7],partli:[1,6],pass:[1,5],past:[0,1],path:6,patholog:7,pattern:[1,2,3,5,6],payoff:5,pdf:0,pdvd:4,peel:2,pen:2,peopl:[0,1],perform:[1,2,3],perm:5,permgroup:5,permiss:1,permut:4,person:0,perspicu:2,phenomenon:3,phrase:[0,1,2,4,5],pi:7,pick:[0,6],pictur:[4,5],piec:[1,4,5,6,7],pietro:0,piotrowski:0,pitfal:3,place:[0,1,2,5,7],placehold:2,placement:4,plai:[1,3,4,6,7],plan:[1,6,7],plane:7,plausibl:3,ple:4,pltn:4,pne3:4,point:[0,1,2,3,5,6,7,8,9],pointwis:[5,7,8],polynomi:5,ponen:1,poor:6,pop:0,port:0,posit:[1,3,4,5,7,9],possibl:[1,2,3,4,5,7],postfix:6,potscrubb:0,pow_eq:4,pow_eq_zero:[2,4],pow_two:[1,4],pow_two_le_fac:4,pow_two_nonneg:[1,2],power:[0,1,3,4,5,6],pp:4,practic:[1,2,3,6,7],pragmat:5,pre:2,preal:5,preced:4,precis:[1,3,7,8],precondit:7,pred:4,predecessor:4,predic:[2,3,4,6,7,8],prefer:[0,1,2,3],prefix:[4,6],preimag:[3,7],preliminari:6,prematur:6,preorder:[2,6,7],presenc:6,present:[1,2,4,7],preserv:[4,6,7],preserves_mul:5,press:0,presuppos:0,pretend:6,pretti:[2,6,7],previou:[1,2,3,5,6,7,8,9],previous:6,price:7,primari:6,primarili:[6,7],prime:[1,2,3,5,6,11],prime_def_lt:4,prime_iff:3,prime_of_mem_factor:4,prime_p:4,prime_q:4,prime_thre:4,prime_two:4,prime_x:3,primes_infinit:4,primes_mod_4_eq_3_infinit:4,primit:[2,3],princip:7,principalidealr:5,principl:[1,2,3,4,6,8],print:[0,3,4,5,9],priori:6,prioriti:5,probabl:[1,5,6,7],problem:[3,4,5,6,7],proce:[4,6],procedur:[4,6],process:3,prod:[4,7,9],prod_:4,prod_empti:4,prod_factor:4,prod_insert:4,prod_map:7,prod_mk:7,prod_po:4,prod_range_succ:4,prod_range_zero:4,produc:[2,8],product:[2,4,5,6,7,9],profici:4,program:[0,1,2],progress:[0,1,5],prohibit:7,project:[0,4,5,7],promis:[6,7],promot:1,proof:[0,1,2,3,4,5,6,7,8],prop:[0,2,3,4,5,6,7,9],propag:6,properti:[1,2,3,4,5,6,7,8,9],proposit:[0,2,3,4,5],protect:5,provabl:[1,3,6,7],prove:[0,2,3,4,5,6,7,8,9,11],provid:[0,1,2,3,4,5,6,7,8,9],proxi:5,ps:4,pseudoemetricspac:7,pseudometricspac:7,psycholog:6,pull:[0,7],pullback:7,pun:2,pure:[1,7],pure_le_nhd:7,purpos:[1,2,3,4,5,6,7],push:[2,4,7],push_neg:[2,3,4],push_pul:7,pushforward:7,put:[0,1,2,3,4,5,6,7],q:[2,4,5,6,7],qk:4,quad:5,quadrat:5,quantifi:[1,3,4,5,7,11],quantiti:7,quest:6,question:[0,4,6,7,9],quick:[4,8],quicker:0,quickli:[3,9],quirk:3,quirki:4,quit:[2,6,7],quot:[5,7],quotient:[4,5,6,7],quotient_mul_add_remainder_eq:5,quotient_zero:5,quotientmonoid:6,r:[1,2,4,5,6,7],r_wellfound:5,radiu:7,raini:3,rais:[1,4],random:6,rang:[0,2,3,4,7],rare:6,rather:[0,1,2,4,5,6,7],ration:[1,2,4,7],rb:7,rcase:[2,3,4,5,7],re:[4,5],reach:[2,6],read:[0,1,4,6,7],readabl:[1,2,3,4,7],reader:[1,7],readi:[4,6,7,8],real:[1,2,3,4,5,6,7,8,9],real_norm_l:8,realli:[1,2,3,4,6,7],reason:[0,1,2,4,5,6,7],rec_on:7,recal:[1,2,4,5,7,9],recaptur:7,recast:7,recent:5,recogn:[1,2,4,5,6,7],recommend:[0,1,3],recon:7,reconcil:2,record:[5,6],recov:7,recurs:[2,3,5,11],redefin:[5,6],reduc:[0,2,3,4,5],reduct:[2,3],redund:[1,5,7,9],refer:[0,1,2,4,5,6,7,8],refin:[4,8],refl:[2,3,5,6],refl_tran:5,reflect:2,reflex:[1,2],reformul:7,refus:[6,7],regiment:0,region:3,regist:[5,6],regular:[6,7],regularspac:7,rel:[3,5],relat:[1,2,3,5,6,7,8,9],relatedli:7,relationship:[3,4],relativ:3,relev:[0,1,2,4,5,6,7],reli:[1,2,3,5,7],remain:[0,1,2,3,5,6,7],remaind:[4,5],remainder_lt:5,remark:[5,6],rememb:[1,2,3,4,5,6,7],remov:[4,7],renam:0,render:[2,4],repeat:[1,4,5,6],repeatedli:[2,7],repetit:[1,6],replac:[0,1,2,3,4,6],replai:0,report:1,repositori:[0,1],repres:[0,1,2,3,4,5,6,8],represent:[3,4,5],reproduc:5,reprov:1,requir:[0,1,2,3,4,5,6,7,8,9],resolut:6,resolve_left:3,respect:[1,2,3,4,5,7],respons:[0,1],rest:[2,3,5,7],restat:[2,6],restor:6,restrict:[3,4,7],result:[0,1,2,3,4,5,6,7],retri:6,reus:6,reusabl:6,reveal:1,revers:[1,2,3,5,7],revert:[4,5],review:7,rewrit:[0,1,2,3,4,5,6,7],rewritten:3,rfl:[0,1,2,3,4,5,6,7,8,9],rich:[5,6],rid:2,right:[1,2,3,4,5,6,7,8],right_distrib:[5,6],right_inv:5,rightinvers:3,ring:[0,1,2,3,4,5,6],ringhom:6,rintro:[0,2,3,4,5,7],rise:[4,6],road:5,robust:[5,6],role:[4,5,7],roll:8,roman:5,root:[5,6,11],roughli:[2,3,4],round:[0,1,5],routin:2,rpo:7,rule:[0,2,4,5,6,7],run:0,rush:0,rw:[0,2,3,4,5,6,7,11],rwa:[3,4,5],s:[0,1,2,3,4,5,6,7,8,9],s_0:[2,3],s_1:2,s_2:2,s_:3,s_n:[2,3],sa:2,sad:7,safe:6,sai:[0,1,2,3,4,5,6,7,9],said:[0,2,4,5],sake:[1,4],salient:7,same:[0,1,2,3,4,5,6,7],satisfi:[1,3,4,5,6,7,8],save:2,saw:[1,5,6,7],sb:2,sb_aux:3,sb_fun:3,sb_inject:3,sb_right_inv:3,sb_set:3,sb_surject:3,sbaux:3,sbfun:3,sbset:3,scalar:[5,6,8],scale:3,scari:5,scheme:5,schroeder_bernstein:3,scienc:6,scientist:2,scope:[1,2,3,5],scott:0,scratch:2,script:1,search:[4,5,6],second:[0,1,2,3,4,5,6,7,9],section:[0,1,2,3,4,5,6,7,8,9],see:[0,1,2,3,4,5,6,7,8,9],seek:5,seem:[1,2,4,6,7,8],seen:[0,1,2,4,5,6,7],segment:[7,9],select:[0,7],self:6,self_sub:1,self_trans_symm:5,selfmodul:6,semi:6,semicolon:[2,4],semigroup:6,send:9,sens:[0,2,3,4,5,6,7,8],sensibl:7,sent:7,separ:[0,1,2,4,5],sequenc:[3,6,7,8,11],seriou:[4,6,7],serv:[1,3,4,5,9],set:[0,1,2,4,5,6,8,9,11],set_integral_const:9,set_opt:6,setco:6,setlik:6,setminu:3,setoid:6,sets_of_superset:7,setub:2,sever:[6,7,9],shade:3,shame:6,sharp:0,shift:[0,1,6,7],shorten:2,shorter:[1,3,4,7],shot:7,should:[0,1,2,3,4,5,6,7,8],shouldn:7,show:[0,1,2,3,4,5,6,7,8,9],shown:[1,5,8,9],side:[0,1,2,3,4,5,6,7,8],sight:[2,6],sigma:[5,9],sigmafinit:9,sign:7,signatur:6,signific:3,silent:[5,6],silli:6,silva:0,similar:[1,2,3,5,6,7],similarli:[2,3,4,5],simp:[0,2,3,4,5,6,7,8],simpa:[4,8],simpl:[2,4,5,6,8],simpler:6,simplex:5,simpli:[0,1,2,3,4,5,6,7],simplif:[2,3,4],simplifi:[0,2,3,4,5,7,9],sin:[2,8],sinc:[0,1,2,3,4,5,6,7],singl:[0,1,2,3,4,5,6,8],singleton:4,sinter:3,sinter_eq_biint:3,situat:[1,3,6,7],size:5,skeleton:[5,7],sketch:[2,3,4,7],skill:[0,1,2,3,4],slick:2,slight:3,slightli:[1,6,7,8],slow:7,small:[0,2,4,5,7],smaller:[3,4,7],smallest:[4,6,7],smart:4,smul:[5,6],smul_add:6,smul_distrib:5,snd:[5,7],snippet:[2,4,5],so:[0,1,2,3,4,5,6,7,8,9],solut:[0,1,4,6],solv:[0,1,2,3,4,5,6,7],some:[0,1,2,3,4,5,6,7,8],someth:[0,1,2,4,6,7],sometim:[1,2,3,4,5,6,7],somewhat:[1,3,7],somewher:7,soon:[0,2,6,7],sophist:7,sorri:[0,1,2,3,4,5,6,7,8],sort:[1,3,4],sosi:2,sosx:2,sound:[3,5,6],sourc:[2,7],space:[1,2,3,5,6,9,11],speak:[2,5,7],special:[3,4,5,6,7,9],specif:[0,1,3,4,5,6],specifi:[1,2,3,4,5,7,8,9],spell:7,split:[1,2,3,4],spot:2,sq_ab:5,sq_add_sq_eq_zero:5,sq_nonneg:1,sqr_eq:4,sqrt:[2,3,4,5],squar:[1,2,4,5,6],squiggli:2,ss:3,ssubt:3,stage:[2,5,6],stai:5,stand:[1,2,5,7,8],standard:[4,5,6,7],standardsimplex:5,standardtwosimplex:5,start:[1,2,3,4,6,7,8,9,11],state:[0,1,2,3,4,6,7,8],statement:[0,1,2,3,4,5,6,7,8,9],stdsimplex:5,steep:0,steinhau:8,step:[0,1,2,3,4,5,6],stick:[1,2,7,8],still:[0,1,2,3,4,5,6,7,9],stipul:8,stop:6,store:5,stori:6,str:5,straightforward:[2,6],strang:[2,4],strategi:[1,2,4],strength:1,strengthen:[1,2,4],stretch:[4,5],strict:[1,2],stricter:8,strictli:[1,2,8],strictmono:7,strictorderedr:1,strike:[1,2],strong:[2,4],strong_induction_on:4,stronger:7,strongli:0,stronglymeasurableatfilt:9,struc:5,structur:[2,4,6,7,8,9,11],stuck:6,studi:[6,7],style:[0,1],sub:[3,7,9,11],sub_add_cancel:[1,5],sub_eq_add_neg:1,sub_self:[1,2],sub_sub:1,subgoal:2,subgroup:6,subject:5,submonoid:6,subobject:6,subproof:1,subr:6,subscript:1,subsequ:[2,4,7],subset:[1,2,3,5,7,8],subset_def:3,subset_iff:4,subspac:[1,6],substant:4,substanti:0,substitut:[0,2],subsum:4,subtl:[5,7],subtleti:6,subtract:[1,4,5],subtyp:[5,6,7],succ:[3,4,6],succ_add:4,succ_eq_add_on:4,succ_le_succ:4,succ_mul:4,succ_ne_zero:4,succ_po:4,succe:6,success:6,successor:4,suffic:[1,2,3,7],suffici:[4,7],sugar:2,suggest:[0,2,4,5,7],suitabl:[0,1,2,5,7],sum:[1,2,4,5,6,7],sum_add_distrib:5,sum_eq:5,sum_eq_on:5,sum_id:4,sum_mul:5,sum_range_succ:4,sum_range_zero:4,sum_sqr:4,summat:4,sumofsquar:2,sumofsquares_mul:2,sunion:3,sunion_eq_biunion:3,sup:[1,4,7],sup_assoc:1,sup_comm:1,sup_inf_left:1,sup_inf_right:1,sup_inf_self:1,sup_l:1,superfici:7,superscript:7,suppli:5,support:[0,1,2,3,4,5,6,7],suppos:[1,2,3,4,5,7],suppress:1,supremum:[1,4,6],sure:[0,1,2,3,5,6],surject:[2,3,7],surjf:[2,3],surjg:2,surpris:6,surprisingli:[5,6],swap:5,swapxi:5,sweet:3,symbol:[1,2,5,6],symm:[3,4,5,6,7,8],symmetr:[2,3],symmetri:[3,6],syntact:2,syntax:[0,1,2,4,6],synth:6,synthes:[5,6],synthinst:6,system:[3,4,5,6],t2_space:7,t2space:7,t:[0,1,2,3,4,5,6,7,9],t_:7,t_x:7,t_y:7,t_z:7,tab:[1,3,4],tackl:6,tactic:[0,1,2,3,4,5,6,7,8],tag:[2,3,6],take:[1,2,3,4,5,6,7,8,9],taken:[1,2],talk:[4,7,8],tantamount:[1,3],target:[1,6,7,9],task:[0,2,4,5,6,7],tauto:4,tautolog:4,teach:0,tear:6,technic:[1,5,6],techniqu:[2,7],technolog:6,tediou:[1,2,6],tell:[0,2,3,4,5,6],temporarili:[1,2],tempt:6,tend:[1,7],tendsto:[7,9],tendsto_attop:7,tendsto_congr:7,tendsto_iff:7,tendsto_integral_of_dominated_converg:9,tendsto_nhds_uniqu:7,tendsto_pow_attop_nhds_0_of_lt_1:7,tendsto_right_iff:7,tendsto_subseq:7,term:[0,1,2,3,4,5,7],termin:0,terminolog:5,ters:6,test:4,text:[0,3,5,7],textbook:[0,2],th:4,than:[0,1,2,3,4,5,6,7,8],thank:[6,7],thei:[0,1,2,3,4,5,6,7,8],them:[0,1,2,3,4,5,6,7],theme:3,themselv:[0,4,5],theorem:[0,2,4,5,7,8,9,11],theoret:[2,3,7],theori:[0,1,2,3,6,7,8,11],therefor:[1,4,5,7],thereof:0,thi:[0,1,2,3,4,5,6,7,8,9],thing:[0,1,2,3,4,5,6,7],think:[0,1,2,3,4,5,6,7,8],third:[1,2,3,5,7],thorough:0,those:[0,1,2,3,5,6,7,8],though:[2,3,4,5],three:[1,2,4,5,7],through:[0,1,3,4,5,6,7],thu:[1,3,4,5,7],thumb:4,tighter:[1,3],tightli:5,time:[1,4,5,6,7,8,9],timesav:1,tiresom:7,to_addit:6,to_localinvers:8,to_real:9,tofun:[5,6],togeth:[1,2,3,4,5,7],tomuloneclass:6,too:[0,1,3,5,6,7],tool:[0,1,5,6],top:[0,6,7,8],topic:[4,6],topolog:[1,5,6,8,11],topological_spac:7,topological_structur:7,topologicalspac:[7,8],toreal:9,total:1,tour:[7,8],trace:6,tradeoff:3,train:[1,6],tran:[2,4,5,6],trans_assoc:5,trans_refl:5,transform:[2,3],transit:[1,2,5,7],translat:[4,6,7],trap:6,treat:[2,3,5,6,7,8],tri:[1,2,4,6],triangl:[1,2,5],trick:[1,2,4,6,8],tricki:[2,3,4,6],trigger:6,tripl:3,trivial:[3,4,7],troubl:[2,3,5],truncat:4,truth:[1,4],tupl:5,turn:[2,3,4,5,6,7,8],tutori:0,twice:[0,1,7],two:[0,1,2,3,4,5,6,7,9],two_l:4,two_le_of_mod_4_eq_3:4,two_mul:1,type:[0,1,2,3,4,5,6,7,8,9],typeclass:6,typic:1,u:[2,3,5,7,9],ubf:2,ubfa:2,ubg:2,ubgb:2,ultim:0,un:3,unbundl:6,unchang:[1,2],uncom:1,uncount:7,uncurri:7,under:[5,6,7],underli:[0,1,5,6],underneath:[1,3],underscor:[1,2,3],understand:[0,2,3,4,5,6,7],understood:[4,7],unfold:[1,2,3,4,5,7],unicod:[1,3,6],unif:6,uniform:[3,7,8],uniformcontinu:7,uniformcontinuous_iff:7,uniformli:8,union:[1,3,4,5,6,8,9],union_def:3,uniqu:[1,2,3,4,5,7],unit:[5,6,7],univ:[3,7,8,9],univ_set:7,univers:[1,3,5,7,11],unknown:6,unless:[1,2,5],unlik:[3,4],unnecessari:3,unpack:[2,3],unpleas:[6,7],unrel:6,unshad:3,unspecifi:6,unsurprisingli:3,until:[1,4,5,6,7],up:[0,2,3,4,5,6,7],updat:0,upper:[1,2],us:[0,2,3,4,5,6,7,8,9,11],usabl:6,usag:1,user:[0,6],usual:[1,2,3,4,5,7,9],v:[2,3,5,7],val:5,valid:2,valu:[1,2,3,4,5,6,7,8,9],varepsilon:[2,7],variabl:[1,2,3,4,5,6,7,8,9],variant:[1,2,7],variat:[1,3,4,5,7,8],varieti:7,variou:[2,3,5,6,9],vastli:2,ve:[6,7],vector:[1,3,6,8],verbos:3,veri:[0,2,4,6,7,9],verifi:2,versa:[1,3],version:[0,1,2,3,4,5,6,7,8,9],vertic:[2,5],vi:5,via:7,vice:[1,3],view:[0,5,6,7],visibl:1,vocabulari:3,volum:9,vs:[0,1,2,3,5],vscode:0,w:[1,6],wa:[1,3],wai:[0,1,2,3,4,5,6,7,9],want:[0,1,2,3,4,5,6,7,8,9],wasn:7,we:[0,1,2,3,4,5,6,7,8,9],weak:6,weaker:[1,2],weav:5,web:[0,1,4],weight:5,weightedaverag:5,weird:[6,7],weirder:8,welcom:[0,1],well:[0,1,2,3,4,5,6,7],were:[2,4,5,7],what:[0,1,2,3,4,5,6,7],whatev:[0,2,4],whatsnew:6,when:[0,1,2,3,4,5,6,7,8],whenev:[1,2,4,5],where:[0,1,2,3,4,5,6,7,8,9],wherea:[0,1,2,3,5,7],wherebi:[5,7],whether:[1,2,3,4,6,7],which:[0,1,2,3,4,5,6,7,8,9],who:[0,7],whole:5,whose:[1,2,4,5,6,7,8],why:[0,2,4,6,7],window:[0,1,2,5],wise:5,wish:7,with_top:8,within:[1,2,7],without:[1,2,4,5,6,7,8],withtop:8,wlog:3,won:[2,4,6,7],word:[1,2,3,4,5,7],work:[0,1,2,3,4,5,6,7,8],world:0,worri:[1,3,4,5],worth:[1,2,5],would:[1,2,3,4,5,6,7,8],wouldn:6,wrap:[6,7],write:[0,1,2,4,5,6,7,8,9],written:[1,2,3,4,5,6,7,8],wrong:3,wrote:4,x:[0,1,2,3,4,5,6,7,8,9],x_0:7,x_1:[2,3],x_2:[2,3],x_i:7,x_nonneg:5,xa:[3,5],xai:3,xb:5,xeq:[2,3],xgt:2,xlt:2,xltz:2,xmem:3,xnt:3,xnu:3,xpo:3,xs:[2,3],xstu:3,xsu:3,xt:3,xtu:3,xu:3,xy:[2,5],y:[0,1,2,3,4,5,6,7,8,9],y_nonneg:5,ya:5,yb:5,yball:7,yeq:2,yet:[2,3,4,5,6,7],yield:[1,2,3,4,5,7],ylim:7,ylt:2,you:[0,1,2,3,4,5,6,7,8,9],your:[0,1,2,3,5,6,7],yourself:[2,5],ypo:3,z:[0,1,2,5,6,7,8,9],z_nonneg:5,za:5,zb:5,zermelo:2,zero:[2,3,4,5,6,7,8,9],zero_add:[1,4,5,6],zero_def:5,zero_dvd_iff:4,zero_im:5,zero_l:[4,5],zero_lt_on:[2,4],zero_lt_two:5,zero_mul:[1,4,5,6],zero_r:5,zero_smul:6,zf:2,zlty:2,zsmul:6,zulip:[0,4]},titles:["<span class=\"section-number\">1. </span>Introduction","<span class=\"section-number\">2. </span>Basics","<span class=\"section-number\">3. </span>Logic","<span class=\"section-number\">4. </span>Sets and Functions","<span class=\"section-number\">5. </span>Elementary Number Theory","<span class=\"section-number\">6. </span>Structures","<span class=\"section-number\">7. </span>Hierarchies","<span class=\"section-number\">8. </span>Topology","<span class=\"section-number\">9. </span>Differential Calculus","<span class=\"section-number\">10. </span>Integration and Measure Theory","Index","Mathematics in Lean"],titleterms:{"function":[3,7],"schr\u00f6der":3,The:[2,3],about:1,algebra:[1,5],appli:1,asymptot:8,ball:7,basic:[1,6],bernstein:3,bi:2,build:5,calcul:1,calculu:8,close:7,compact:7,comparison:8,complet:7,conjunct:2,continu:[7,8],converg:[2,7],countabl:7,defin:5,differenti:8,disjunct:2,elementari:[4,8,9],exampl:1,existenti:2,fact:1,filter:7,fundament:7,gaussian:5,get:0,hierarchi:6,ident:1,implic:2,index:10,induct:4,infinit:4,integ:5,integr:9,introduct:0,irrat:4,lean:11,lemma:1,linear:8,logic:2,mani:4,map:8,mathemat:11,measur:9,metric:7,more:1,morphism:6,negat:2,norm:8,number:4,object:6,open:7,overview:0,prime:4,prove:1,quantifi:2,recurs:4,root:4,rw:1,separ:7,sequenc:2,set:[3,7],space:[7,8],start:0,structur:[1,5],sub:6,theorem:[1,3],theori:[4,9],topolog:7,uniformli:7,univers:2,us:1}}) Search.setIndex({"docnames": ["C01_Introduction", "C02_Basics", "C03_Logic", "C04_Sets_and_Functions", "C05_Elementary_Number_Theory", "C06_Structures", "C07_Hierarchies", "C08_Topology", "C09_Differential_Calculus", "C10_Integration_and_Measure_Theory", "genindex", "index"], "filenames": ["C01_Introduction.rst", "C02_Basics.rst", "C03_Logic.rst", "C04_Sets_and_Functions.rst", "C05_Elementary_Number_Theory.rst", "C06_Structures.rst", "C07_Hierarchies.rst", "C08_Topology.rst", "C09_Differential_Calculus.rst", "C10_Integration_and_Measure_Theory.rst", "genindex.rst", "index.rst"], "titles": ["<span class=\"section-number\">1. </span>Introduction", "<span class=\"section-number\">2. </span>Basics", "<span class=\"section-number\">3. </span>Logic", "<span class=\"section-number\">4. </span>Sets and Functions", "<span class=\"section-number\">5. </span>Elementary Number Theory", "<span class=\"section-number\">6. </span>Structures", "<span class=\"section-number\">7. </span>Hierarchies", "<span class=\"section-number\">8. </span>Topology", "<span class=\"section-number\">9. </span>Differential Calculus", "<span class=\"section-number\">10. </span>Integration and Measure Theory", "Index", "Mathematics in Lean"], "terms": {"The": [0, 1, 4, 5, 6, 7, 8, 9, 11], "goal": [0, 1, 2, 3, 4, 5, 7], "thi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "book": [0, 2, 7], "teach": 0, "you": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "formal": [0, 1, 2, 3, 4, 5, 6, 7, 8], "mathemat": [0, 1, 2, 3, 4, 5, 6, 7], "us": [0, 2, 3, 4, 5, 6, 7, 8, 9, 11], "lean": [0, 1, 2, 3, 4, 5, 6, 7, 8], "4": [0, 1, 2, 4, 5, 7, 8], "interact": [0, 5, 6, 9], "proof": [0, 1, 2, 3, 4, 5, 6, 7, 8], "assist": [0, 2, 5], "It": [0, 1, 2, 3, 4, 5, 6, 7, 8], "assum": [0, 1, 2, 3, 4, 6, 7], "know": [0, 1, 2, 3, 4, 5, 6, 7, 8], "some": [0, 1, 2, 3, 4, 5, 6, 7, 8], "doe": [0, 1, 2, 3, 4, 5, 6, 7, 8], "requir": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "much": [0, 2, 4, 6, 7, 8], "although": [0, 3, 4, 5, 6, 7], "we": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "cover": [0, 1, 3, 6, 7, 8], "exampl": [0, 2, 3, 4, 5, 6, 7, 8, 9, 11], "rang": [0, 2, 3, 4, 7], "from": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "number": [0, 1, 2, 3, 5, 6, 7, 8, 11], "theori": [0, 1, 2, 3, 6, 7, 8, 11], "measur": [0, 5, 7, 8, 11], "analysi": [0, 5, 8], "focu": [0, 1, 7, 9], "elementari": [0, 3, 5, 7, 11], "aspect": [0, 5], "those": [0, 1, 2, 3, 5, 6, 7, 8], "field": [0, 1, 5, 6, 8], "hope": 0, "thei": [0, 1, 2, 3, 4, 5, 6, 7, 8], "ar": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "familiar": [0, 1, 4, 5, 7, 8], "can": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "pick": [0, 6], "them": [0, 1, 2, 3, 4, 5, 6, 7], "up": [0, 2, 3, 4, 5, 6, 7], "go": [0, 1, 2, 3, 4, 6, 7], "also": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "don": [0, 1, 2, 3, 4, 5, 6, 7, 9], "t": [0, 1, 2, 3, 4, 5, 6, 7, 9], "presuppos": 0, "ani": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "background": 0, "method": [0, 2, 3, 4, 5], "seen": [0, 1, 2, 4, 5, 6, 7], "kind": [0, 1, 6, 7], "comput": [0, 2, 3, 4, 5, 8, 9], "program": [0, 1, 2], "write": [0, 1, 2, 4, 5, 6, 7, 8, 9], "definit": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "theorem": [0, 2, 4, 5, 7, 8, 9, 11], "regiment": 0, "languag": [0, 1, 2, 3], "like": [0, 1, 2, 3, 4, 5, 6, 7], "understand": [0, 2, 3, 4, 5, 6, 7], "In": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "return": [0, 2, 3, 4, 5, 7], "provid": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "feedback": 0, "inform": [0, 1, 2, 3, 5, 6, 7], "interpret": [0, 1, 4, 5, 7], "express": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "guarante": [0, 3, 5], "well": [0, 1, 2, 3, 4, 5, 6, 7], "form": [0, 1, 2, 3, 4, 5, 6, 7, 9], "ultim": 0, "certifi": 0, "correct": [0, 1], "our": [0, 1, 2, 3, 4, 5, 6, 7, 9], "learn": [0, 1, 4, 5], "more": [0, 2, 3, 4, 5, 6, 7, 8, 11], "about": [0, 2, 3, 4, 5, 6, 7, 8, 11], "project": [0, 4, 5, 7], "page": [0, 1, 4], "commun": [0, 4], "web": [0, 1, 4], "tutori": 0, "base": [0, 2, 3, 4, 6, 7, 8], "s": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "larg": [0, 6, 7], "ever": [0, 7], "grow": [0, 6], "librari": [0, 1, 2, 3, 4, 5, 7, 8], "mathlib": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "strongli": 0, "recommend": [0, 1, 3], "join": [0, 1, 5], "zulip": [0, 4], "onlin": 0, "chat": 0, "group": [0, 1, 2, 3, 5, 6, 7, 8], "haven": [0, 2, 6, 7], "alreadi": [0, 1, 2, 3, 4, 5, 6, 7], "ll": [0, 2, 4, 6, 7], "find": [0, 1, 2, 4, 5, 6, 7], "live": [0, 5], "welcom": [0, 1], "enthusiast": 0, "happi": 0, "answer": [0, 5, 7], "question": [0, 4, 6, 7, 9], "offer": [0, 2, 5, 7], "moral": [0, 5], "support": [0, 1, 2, 3, 4, 5, 6, 7], "read": [0, 1, 4, 6, 7], "pdf": 0, "html": 0, "version": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "design": [0, 1, 2, 3, 5, 7], "run": 0, "insid": [0, 1, 2, 3], "vs": [0, 1, 2, 3, 5], "code": [0, 1, 2, 3, 5, 6], "editor": [0, 1], "To": [0, 1, 2, 3, 4, 5, 6, 7], "instal": [0, 6], "follow": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "instruct": [0, 1, 2, 7], "isn": [0, 2, 3, 4, 6], "enough": [0, 1, 2, 3, 4, 6, 7], "just": [0, 1, 2, 3, 4, 5, 6, 7], "extens": [0, 1, 6, 7, 8], "vscode": 0, "make": [0, 1, 2, 3, 4, 5, 6, 7, 8], "sure": [0, 1, 2, 3, 5, 6], "complet": [0, 1, 2, 3, 4, 6, 8], "step": [0, 1, 2, 3, 4, 5, 6], "so": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "elan": 0, "have": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "git": 0, "termin": 0, "navig": 0, "folder": 0, "where": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "want": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "put": [0, 1, 2, 3, 4, 5, 6, 7], "copi": [0, 3, 4, 6, 7], "repositori": [0, 1], "type": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "clone": 0, "http": [0, 6], "github": [0, 1], "com": 0, "leanprov": 0, "mathematics_in_lean": 0, "fetch": 0, "execut": 0, "lake": 0, "ex": [0, 2], "cach": 0, "compil": 0, "open": [0, 1, 2, 3, 4, 5, 8, 9], "choos": [0, 2, 3, 4, 5, 6, 7], "file": [0, 1, 4, 5, 6, 7], "menu": [0, 1], "Be": [0, 1, 3], "other": [0, 1, 2, 3, 4, 5, 6, 7], "each": [0, 1, 2, 3, 4, 5, 6, 7, 8], "section": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "ha": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "an": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "associ": [0, 1, 2, 4, 5, 6, 7, 9], "exercis": [0, 1, 2, 3, 5, 6, 7, 8], "mil": 0, "organ": 0, "chapter": [0, 1, 2, 3, 4, 5, 6, 7, 8], "experi": [0, 1, 7], "do": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "leav": [0, 1, 2, 3, 5, 6], "origin": [0, 1, 5], "intact": 0, "easier": [0, 1, 3, 4, 6, 7], "updat": 0, "chang": [0, 1, 2, 4, 5, 7, 9], "see": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "below": [0, 2, 3, 4, 5, 6, 7, 8, 9], "call": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "my_fil": 0, "whatev": [0, 2, 4], "creat": [0, 1, 6], "your": [0, 1, 2, 3, 5, 6, 7], "own": [0, 1, 4, 5, 6], "At": [0, 1, 2, 4, 5, 6], "point": [0, 1, 2, 3, 5, 6, 7, 8, 9], "textbook": [0, 2], "side": [0, 1, 2, 3, 4, 5, 6, 7, 8], "panel": 0, "ctrl": [0, 1, 2, 4, 5], "shift": [0, 1, 6, 7], "p": [0, 1, 2, 3, 4, 5, 6, 7, 9], "document": [0, 1, 3, 4, 6], "view": [0, 5, 6, 7], "bar": [0, 1, 2], "appear": [0, 1, 2, 5, 6, 7], "press": 0, "select": [0, 7], "soon": [0, 2, 6, 7], "highlight": [0, 2], "window": [0, 1, 2, 5], "click": [0, 1, 3, 4, 5, 6], "current": [0, 1, 2, 6], "altern": [0, 2, 3, 4, 5, 6, 7], "cloud": 0, "gitpod": 0, "how": [0, 1, 2, 3, 4, 5, 6, 7, 9], "still": [0, 1, 2, 3, 4, 5, 6, 7, 9], "work": [0, 1, 2, 3, 4, 5, 6, 7, 8], "describ": [0, 1, 2, 3, 4, 5, 6, 7], "abov": [0, 1, 2, 3, 4, 5, 6, 7, 9], "progress": [0, 1, 5], "pull": [0, 7], "content": [0, 1, 2, 4, 7], "which": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "why": [0, 2, 4, 6, 7], "suggest": [0, 2, 4, 5, 7], "intend": [0, 1, 2, 5], "while": [0, 1, 2, 6, 7], "contain": [0, 2, 3, 4, 5, 6, 7, 8, 9], "explan": [0, 7], "hint": [0, 1, 2, 9], "text": [0, 3, 5, 7], "often": [0, 1, 2, 3, 4, 5, 6, 7], "includ": [0, 1, 2, 3, 4, 6, 7, 8], "one": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "eval": 0, "hello": 0, "world": 0, "should": [0, 1, 2, 3, 4, 5, 6, 7, 8], "abl": [0, 1, 2, 3, 4, 5, 6, 8], "correspond": [0, 1, 2, 3, 4, 5, 6, 7, 8], "If": [0, 1, 2, 3, 4, 5, 6, 7], "line": [0, 1, 2, 3, 4, 6], "show": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "hover": [0, 1, 2, 3, 4, 5], "cursor": [0, 1, 2], "over": [0, 1, 2, 3, 4, 5, 6, 7, 8], "command": [0, 1, 2, 3, 4, 5, 6], "respons": [0, 1], "pop": 0, "encourag": [0, 1, 2, 3, 4, 5], "edit": 0, "try": [0, 1, 2, 3, 4, 5, 6, 7], "moreov": [0, 1, 4, 5, 7], "lot": [0, 3, 5, 6, 7], "challeng": [0, 1, 2, 3, 5, 8], "rush": 0, "past": [0, 1], "through": [0, 1, 3, 4, 5, 6, 7], "central": [0, 4], "all": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "when": [0, 1, 2, 3, 4, 5, 6, 7, 8], "feel": [0, 1, 2, 6, 7], "comfort": 0, "master": [0, 1, 4], "relev": [0, 1, 2, 4, 5, 6, 7], "skill": [0, 1, 2, 3, 4], "free": [0, 1, 7], "move": [0, 1, 2, 6, 7], "alwai": [0, 1, 2, 3, 5, 6], "compar": [0, 5, 6, 7], "solut": [0, 1, 4, 6], "ones": [0, 1, 2, 3, 5, 9], "simpli": [0, 1, 2, 3, 4, 5, 6, 7], "tool": [0, 1, 5, 6], "build": [0, 2, 4, 6, 7, 11], "complex": [0, 1, 2, 4, 5, 8, 9], "known": [0, 1, 2, 3, 4, 5, 6, 7, 8], "depend": [0, 2, 3, 4, 5, 6, 7], "everi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "check": [0, 1, 2, 3, 4, 5, 6, 7], "print": [0, 3, 4, 5, 9], "\u2115": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "These": [0, 1, 3, 4, 5, 8, 9], "object": [0, 1, 2, 3, 4, 5, 11], "2": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "def": [0, 2, 3, 4, 5, 6, 7], "f": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "x": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "3": [0, 1, 2, 3, 4, 5, 6, 7], "prop": [0, 2, 3, 4, 5, 6, 7, 9], "statement": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "fermatlasttheorem": 0, "y": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "z": [0, 1, 2, 5, 6, 7, 8, 9], "n": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "0": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "itself": [0, 2, 3, 5, 6, 7, 8], "Such": [0, 1, 2, 6], "proposit": [0, 2, 3, 4, 5], "easi": [0, 4, 5, 6, 7], "rfl": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "hard": [0, 1, 3, 5, 6], "sorri": [0, 1, 2, 3, 4, 5, 6, 7, 8], "manag": [0, 1, 4, 5, 7], "construct": [0, 2, 3, 4, 5, 6, 7], "accept": [0, 1, 2, 7], "term": [0, 1, 2, 3, 4, 5, 7], "done": [0, 2, 3, 4, 6, 7], "someth": [0, 1, 2, 4, 6, 7], "veri": [0, 2, 4, 6, 7, 9], "impress": 0, "cheat": [0, 1], "now": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "game": [0, 6], "left": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "rule": [0, 2, 4, 5, 6, 7], "complementari": 0, "companion": [0, 1], "prove": [0, 2, 3, 4, 5, 6, 7, 8, 9, 11], "thorough": 0, "underli": [0, 1, 5, 6], "logic": [0, 1, 3, 4, 5, 11], "framework": 0, "core": [0, 4, 5], "syntax": [0, 1, 2, 4, 6], "peopl": [0, 1], "who": [0, 7], "prefer": [0, 1, 2, 3], "user": [0, 6], "manual": [0, 3, 4], "befor": [0, 1, 2, 3, 4, 5, 6], "new": [0, 1, 2, 3, 4, 5, 6, 7], "dishwash": 0, "person": 0, "hit": [0, 1], "button": 0, "figur": [0, 1, 2, 5], "out": [0, 1, 2, 3, 4, 5, 6, 7], "activ": 0, "potscrubb": 0, "featur": [0, 2, 4], "later": [0, 1, 2, 4, 5, 6, 7], "sens": [0, 2, 3, 4, 5, 6, 7, 8], "here": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "refer": [0, 1, 2, 4, 5, 6, 7, 8], "back": [0, 1, 2, 3, 5, 6, 7], "necessari": [0, 2, 4, 5], "anoth": [0, 1, 2, 3, 4, 5, 6, 7], "thing": [0, 1, 2, 3, 4, 5, 6, 7], "distinguish": [0, 5, 6, 7, 8], "place": [0, 1, 2, 5, 7], "greater": [0, 1, 2, 3, 4, 7], "emphasi": [0, 6], "tactic": [0, 1, 2, 3, 4, 5, 6, 7, 8], "given": [0, 1, 2, 3, 4, 5, 6, 7], "two": [0, 1, 2, 3, 4, 5, 6, 7, 9], "wai": [0, 1, 2, 3, 4, 5, 6, 7, 9], "down": [0, 3, 4, 6, 7], "themselv": [0, 4, 5], "suitabl": [0, 1, 2, 5, 7], "descript": [0, 1, 2, 4, 7], "thereof": 0, "For": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "repres": [0, 1, 2, 3, 4, 5, 6, 8], "fact": [0, 2, 3, 4, 5, 6, 7, 8, 9, 11], "even": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "m": [0, 1, 2, 4, 6, 7, 8], "nat": [0, 1, 2, 3, 4, 5, 7], "fun": [0, 2, 3, 4, 5, 6, 7, 8, 9], "k": [0, 2, 4, 5, 7, 8], "hk": [0, 8], "hmn": 0, "rw": [0, 2, 3, 4, 5, 6, 7, 11], "mul_add": [0, 1, 4, 6], "l": [0, 1, 8, 9], "_": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "compress": [0, 1, 7], "singl": [0, 1, 2, 3, 4, 5, 6, 8], "instead": [0, 1, 2, 3, 4, 5, 6, 7], "style": [0, 1], "same": [0, 1, 2, 3, 4, 5, 6, 7], "comment": [0, 4], "henc": [0, 2, 3, 4, 5, 6, 7, 8], "ignor": [0, 7], "sai": [0, 1, 2, 3, 4, 5, 6, 7, 9], "natur": [0, 1, 2, 3, 4, 5, 6, 7, 8], "rintro": [0, 2, 3, 4, 5, 7], "need": [0, 1, 2, 3, 4, 5, 6, 7], "twice": [0, 1, 7], "let": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "substitut": [0, 2], "obviou": [0, 4, 5, 6], "ring": [0, 1, 2, 3, 4, 5, 6], "As": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "enter": [0, 1, 2, 3, 7], "displai": [0, 1, 2, 6], "state": [0, 1, 2, 3, 4, 6, 7, 8], "separ": [0, 1, 2, 4, 5], "tell": [0, 2, 3, 4, 5, 6], "what": [0, 1, 2, 3, 4, 5, 6, 7], "establish": [0, 1, 2, 3, 4, 5], "task": [0, 2, 4, 5, 6, 7], "remain": [0, 1, 2, 3, 5, 6, 7], "replai": 0, "sinc": [0, 1, 2, 3, 4, 5, 6, 7], "continu": [0, 1, 4, 5, 6, 9], "first": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "introduc": [0, 1, 2, 3, 4, 7, 9], "could": [0, 1, 2, 4, 5, 6, 7], "renam": 0, "decompos": [0, 3, 5], "hypothesi": [0, 1, 2, 3, 4], "assumpt": [0, 1, 2, 3, 4, 5, 7, 8, 9], "second": [0, 1, 2, 3, 4, 5, 6, 7, 9], "declar": [0, 1, 4, 5, 6], "next": [0, 1, 2, 3, 4, 5, 6, 7, 8], "rewrit": [0, 1, 2, 3, 4, 5, 6, 7], "replac": [0, 1, 2, 3, 4, 6], "solv": [0, 1, 2, 3, 4, 5, 6, 7], "result": [0, 1, 2, 3, 4, 5, 6, 7], "abil": 0, "small": [0, 2, 4, 5, 7], "increment": [0, 1], "extrem": [0, 6, 7], "power": [0, 1, 3, 4, 5, 6], "reason": [0, 1, 2, 4, 5, 6, 7], "quicker": 0, "than": [0, 1, 2, 3, 4, 5, 6, 7, 8], "There": [0, 1, 2, 3, 4, 6, 7, 8, 9], "sharp": 0, "distinct": [0, 2, 3, 4, 5, 7], "between": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "insert": [0, 2, 4, 5, 7, 8], "did": [0, 2, 6, 7], "phrase": [0, 1, 2, 4, 5], "mul_left_comm": [0, 4], "convers": [0, 2, 4, 7], "short": [0, 1, 2, 3, 4, 5], "middl": [0, 1, 2, 7], "That": [0, 4, 5, 6], "said": [0, 2, 4, 5], "reduc": [0, 2, 3, 4, 5], "liner": 0, "carri": [0, 1, 2, 3, 4, 5, 6, 7, 9], "But": [0, 1, 2, 3, 4, 5, 6, 7], "substanti": 0, "autom": [0, 1, 5], "justifi": [0, 1, 2, 7], "longer": [0, 4, 5], "calcul": [0, 2, 4, 5, 11], "bigger": [0, 3, 8], "inferenti": 0, "invok": [0, 1, 7], "simplifi": [0, 2, 3, 4, 5, 7, 9], "specif": [0, 1, 3, 4, 5, 6], "pariti": [0, 4], "automat": [0, 1, 2, 3, 4, 5, 6, 7, 8], "intro": [0, 1, 2, 3, 4, 5, 6, 7], "simp": [0, 2, 3, 4, 5, 6, 7, 8], "parity_simp": 0, "big": [0, 5, 7, 8], "differ": [0, 1, 2, 3, 4, 5, 6, 7, 8], "onli": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "its": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "built": [0, 2, 6], "wherea": [0, 1, 2, 3, 5, 7], "top": [0, 6, 7, 8], "meant": [0, 2, 6], "rather": [0, 1, 2, 4, 5, 6, 7], "think": [0, 1, 2, 3, 4, 5, 6, 7, 8], "basic": [0, 2, 4, 5, 7, 9, 11], "entri": [0, 5], "brows": [0, 1, 4], "frustrat": [0, 6], "curv": 0, "steep": 0, "newcom": 0, "avail": [0, 1, 4, 5, 6], "round": [0, 1, 5], "clock": 0, "doubt": 0, "too": [0, 1, 3, 5, 6, 7], "contribut": [0, 3], "develop": [0, 1, 4, 9], "mission": 0, "dive": 0, "come": [0, 1, 2, 3, 4, 5, 6, 7], "forewarn": 0, "fundament": [0, 4, 5, 6, 9], "life": [0, 2], "mai": [0, 1, 2, 3, 5, 6, 7, 8], "never": [0, 6], "acknowledg": 0, "grate": [0, 5], "gabriel": 0, "ebner": 0, "set": [0, 1, 2, 4, 5, 6, 8, 9, 11], "infrastructur": 0, "scott": 0, "morrison": 0, "mario": 0, "carneiro": 0, "help": [0, 1, 2, 3, 4, 5, 6, 7], "port": 0, "julian": 0, "berman": 0, "alex": 0, "best": 0, "bulwi": 0, "cha": 0, "bryan": 0, "gin": 0, "ge": [0, 2, 5], "chen": 0, "johan": 0, "commelin": 0, "mathieu": 0, "guai": 0, "paquet": 0, "k\u00fclshammer": 0, "giovanni": 0, "mascellani": 0, "hunter": 0, "monro": 0, "pietro": 0, "monticon": 0, "oliv": 0, "nash": 0, "bartosz": 0, "piotrowski": 0, "guilherm": 0, "silva": 0, "been": [0, 1, 2, 4, 5, 6, 8], "partial": [0, 1, 2, 3, 5, 6], "hoskinson": 0, "center": [0, 7], "nut": 1, "bolt": 1, "gener": [1, 2, 3, 4, 5, 6, 7, 8, 9], "without": [1, 2, 4, 5, 6, 7, 8], "net": 1, "hand": [1, 2, 3, 4, 5, 6, 7], "equal": [1, 2, 3, 4, 5, 6, 7, 9], "right": [1, 2, 3, 4, 5, 6, 7, 8], "tantamount": [1, 3], "name": [1, 2, 3, 4, 5, 6, 7, 8], "b": [1, 2, 3, 4, 5, 6, 7, 8, 9], "c": [1, 2, 4, 5, 6, 7, 8, 9], "real": [1, 2, 3, 4, 5, 6, 7, 8, 9], "mul_assoc": [1, 2, 4, 5, 6], "mul_comm": [1, 2, 4, 5, 6], "elimin": 1, "explicitli": [1, 2, 3, 5, 6, 7, 8], "purpos": [1, 2, 3, 4, 5, 6, 7], "illustr": [1, 2, 3, 4, 5], "multipl": [1, 2, 3, 4, 5, 6, 8], "written": [1, 2, 3, 4, 5, 6, 7, 8], "howev": [1, 2, 5, 6, 7, 8], "good": [1, 2, 3, 4, 5, 6, 7], "mind": [1, 2, 5, 6], "notat": [1, 2, 3, 4, 5, 6, 7, 8, 9], "convent": [1, 5, 9], "parenthes": [1, 2, 3, 4], "import": [1, 2, 3, 4, 5, 6, 7, 9], "data": [1, 2, 4, 5, 6, 7], "\u211d": [1, 2, 3, 5, 6, 7, 8, 9], "begin": [1, 2, 3, 4, 5, 6], "sake": [1, 4], "breviti": [1, 5], "suppress": 1, "repeat": [1, 4, 5, 6], "happen": [1, 6, 7], "charact": [1, 3, 6], "r": [1, 2, 4, 5, 6, 7], "symbol": [1, 2, 5, 6], "doesn": [1, 2, 7], "until": [1, 4, 5, 6, 7], "space": [1, 2, 3, 5, 6, 9, 11], "tab": [1, 3, 4], "kei": [1, 4, 5, 7], "curiou": [1, 6], "abbrevi": [1, 2, 3, 5], "get": [1, 2, 3, 4, 6, 7, 8, 11], "access": [1, 3, 5, 6, 7, 9], "keyboard": 1, "easili": [1, 4, 5, 6], "backslash": [1, 3], "lead": [1, 2, 4, 5, 6, 7], "lean4": 1, "input": [1, 3, 7], "leader": 1, "report": 1, "infoview": 1, "A": [1, 2, 3, 4, 5, 6, 7, 8], "typic": 1, "might": [1, 2, 3, 4, 5], "look": [1, 2, 3, 4, 6, 7], "1": [1, 2, 3, 4, 5, 6, 7, 8, 9], "h\u2081": [1, 2, 3, 4], "prime": [1, 2, 3, 5, 6, 11], "h\u2082": [1, 3, 4], "h\u2083": [1, 3], "denot": [1, 3, 4, 6, 7], "context": [1, 2, 4, 5, 6, 7, 8, 9], "plai": [1, 3, 4, 6, 7], "three": [1, 2, 4, 5, 7], "label": [1, 2], "everyth": [1, 2, 6, 7], "identifi": [1, 2, 4], "subscript": 1, "h": [1, 2, 3, 4, 5, 6, 7, 8, 9], "legal": 1, "would": [1, 2, 3, 4, 5, 6, 7, 8], "h1": [1, 3, 4, 5], "h2": [1, 3, 5], "h3": 1, "foo": [1, 3, 5], "baz": 1, "last": [1, 2, 3, 4, 5, 6, 7], "sometim": [1, 2, 3, 4, 5, 6, 7], "target": [1, 6, 7, 9], "combin": [1, 2, 5, 6, 7], "practic": [1, 2, 3, 6, 7], "mean": [1, 2, 3, 4, 5, 6, 7, 8, 9], "usual": [1, 2, 3, 4, 5, 7, 9], "clear": [1, 2, 4, 5, 6], "case": [1, 2, 3, 4, 5, 6, 7, 9], "With": [1, 3, 4, 6, 7], "arrow": [1, 2, 6, 7], "revers": [1, 2, 3, 5, 7], "note": [1, 2, 4, 5, 6, 7, 9], "noth": [1, 2, 3, 4, 5, 6], "argument": [1, 2, 3, 4, 5, 6, 7], "tri": [1, 2, 4, 6], "match": [1, 2, 5], "pattern": [1, 2, 3, 5, 6], "local": [1, 2, 6, 7, 8], "d": [1, 2, 4, 5, 8], "e": [1, 2, 3, 4, 5, 6, 7, 8, 9], "sub_self": [1, 2], "hyp": 1, "list": [1, 2, 3, 4, 5], "comma": 1, "squar": [1, 2, 4, 5, 6], "bracket": [1, 2, 5, 6], "after": [1, 2, 4, 6, 7, 8], "trick": [1, 2, 4, 6, 8], "variabl": [1, 2, 3, 4, 5, 6, 7, 8, 9], "onc": [1, 2, 3, 4, 5, 6, 7, 9], "outsid": [1, 4], "inspect": 1, "reveal": 1, "inde": [1, 5, 6, 7, 8], "delimit": 1, "scope": [1, 2, 3, 5], "end": [1, 2, 3, 4, 5, 6, 7, 8], "block": [1, 4], "final": [1, 2, 3, 5, 7, 9], "recal": [1, 2, 4, 5, 7, 9], "introduct": [1, 2, 7, 11], "determin": [1, 5, 7], "both": [1, 2, 3, 4, 5, 6, 7, 8], "expect": [1, 2, 3, 4, 5, 6, 7], "rais": [1, 4], "error": [1, 2, 3, 6], "explain": [1, 2, 3, 4, 5, 6, 7, 9], "output": 1, "meanwhil": [1, 4], "take": [1, 2, 3, 4, 5, 6, 7, 8, 9], "two_mul": 1, "add_mul": [1, 6], "distribut": [1, 4, 5, 6], "addit": [1, 2, 4, 5, 6, 7, 8, 9], "add_assoc": [1, 4, 5, 6], "precis": [1, 3, 7, 8], "possibl": [1, 2, 3, 4, 5, 7], "calc": [1, 2, 3, 5, 7], "keyword": [1, 2, 4, 5], "notic": [1, 2, 3, 4, 5, 7], "finicki": 1, "underscor": [1, 2, 3], "justif": [1, 2], "format": 1, "indic": [1, 2, 3, 5, 6], "indent": 1, "One": [1, 2, 3, 4, 5, 6, 7], "outlin": [1, 2, 4, 7], "modulo": [1, 4, 5], "individu": 1, "pure": [1, 7], "littl": [1, 2, 7, 8], "underneath": [1, 3], "pow_two": [1, 4], "mul_sub": 1, "add_sub": 1, "sub_sub": 1, "add_zero": [1, 5, 6], "perform": [1, 2, 3], "exact": [1, 2, 3, 4, 5, 7], "becaus": [1, 2, 3, 4, 5, 6, 7, 8], "exactli": [1, 2, 3, 5, 6, 7], "close": [1, 2, 3, 6, 8, 9], "bit": [1, 2, 4, 6, 7], "commut": [1, 2, 3, 4, 5, 6, 8], "long": [1, 2, 3, 5, 6, 8], "axiom": [1, 2, 3, 5, 6, 7, 9], "indirectli": 1, "similar": [1, 2, 3, 5, 6, 7], "common": [1, 2, 3, 4, 5, 7], "variat": [1, 3, 4, 5, 7, 8], "nth_rewrit": 1, "allow": [1, 2, 3, 4, 5, 6, 7, 8, 9], "particular": [1, 2, 5, 6, 7], "instanc": [1, 2, 3, 4, 5, 6, 7, 8], "enumer": [1, 2], "start": [1, 2, 3, 4, 6, 7, 8, 9, 11], "occurr": 1, "nth_rw": 1, "consist": [1, 3, 5, 6, 7, 8], "collect": [1, 2, 3, 5, 7, 9], "oper": [1, 2, 3, 4, 5, 6, 7, 8], "time": [1, 4, 5, 6, 7, 8, 9], "constant": [1, 2, 9], "mapsto": [1, 5], "abelian": [1, 5, 6], "negat": [1, 5, 11], "invers": [1, 3, 5, 6, 8, 9], "add_comm": [1, 4, 5, 6], "zero_add": [1, 4, 5, 6], "add_left_neg": [1, 5], "mul_on": [1, 5, 6], "one_mul": [1, 2, 5, 6], "being": [1, 3, 5, 7, 8], "suffic": [1, 2, 3, 7], "give": [1, 2, 3, 4, 6, 7, 9], "element": [1, 2, 3, 4, 5, 6, 7, 8, 9], "concret": [1, 2, 4, 5, 6, 7], "integ": [1, 2, 4, 6, 11], "abstract": [1, 2, 5, 6, 7], "character": [1, 3, 4, 7, 8], "axiomat": [1, 2, 3, 5], "train": [1, 6], "recogn": [1, 2, 4, 5, 6, 7], "appropri": [1, 2, 3, 5, 6], "\u2124": [1, 4, 5, 6], "ration": [1, 2, 4, 7], "\u211a": [1, 4, 7], "\u2102": [1, 5, 8], "extend": [1, 3, 4, 5, 6, 7, 9], "order": [1, 2, 3, 4, 5, 6, 7, 8], "Not": [1, 5, 7], "properti": [1, 2, 3, 4, 5, 6, 7, 8, 9], "hold": [1, 2, 3, 4, 5, 7, 9], "arbitrari": [1, 2, 3, 4, 5], "taken": [1, 2], "cours": [1, 2, 4, 6, 7, 8, 9], "linear": [1, 2, 5, 7], "matric": [1, 5], "fail": [1, 2, 3, 4, 5, 6, 7, 9], "commr": [1, 2, 5], "unchang": [1, 2], "linarith": [1, 2, 4, 5], "permiss": 1, "strike": [1, 2], "balanc": 1, "concis": [1, 5], "readabl": [1, 2, 3, 4, 7], "strengthen": [1, 2, 4], "deriv": [1, 2, 4, 8, 9], "most": [1, 2, 3, 4, 5, 6, 7, 9], "organiz": 1, "mechan": [1, 2, 5], "namespac": [1, 2, 3, 4, 5, 7], "full": [1, 2, 3, 4, 5, 6, 7], "shorter": [1, 3, 4, 7], "avoid": [1, 2, 3, 4, 5, 6, 8], "due": [1, 3, 6], "clash": 1, "myre": 1, "add_right_neg": 1, "effect": [1, 3, 6, 7], "temporarili": [1, 2], "reprov": 1, "care": [1, 2, 3, 5], "earlier": 1, "pai": [1, 2, 6, 7], "attent": [1, 2, 4, 6, 7], "curli": [1, 2], "implicit": [1, 2, 5, 6, 7, 8], "moment": [1, 2, 5], "worri": [1, 3, 4, 5], "neg_add_cancel_left": 1, "add_neg_cancel_right": 1, "add_left_cancel": 1, "add_right_cancel": 1, "plan": [1, 6, 7], "brace": 1, "imagin": 1, "situat": [1, 3, 6, 7], "draw": [1, 5, 6], "conclus": [1, 2, 4], "hypothes": [1, 2, 3, 4, 5], "redund": [1, 5, 7, 9], "few": [1, 2, 3, 4, 7], "extra": [1, 2, 3, 5, 6, 7], "oner": 1, "complic": [1, 2, 6], "tediou": [1, 2, 6], "mark": [1, 2, 6, 7], "suppos": [1, 2, 3, 4, 5, 7], "infer": [1, 2, 3, 5, 6], "mul_zero": [1, 5, 6], "serv": [1, 3, 4, 5, 9], "therefor": [1, 4, 5, 7], "promot": 1, "modular": 1, "subproof": 1, "wa": [1, 3], "except": [1, 2, 5], "ad": [1, 2, 3, 4, 5, 6, 7], "variant": [1, 2, 7], "whose": [1, 2, 4, 5, 6, 7, 8], "necessarili": [1, 9], "miss": [1, 3, 4], "piec": [1, 4, 5, 6, 7], "either": [1, 2, 3, 5, 6, 7], "becom": [1, 4, 5, 6, 7], "technic": [1, 5, 6], "strictli": [1, 2, 8], "less": [1, 2, 3, 4, 5, 6, 7], "script": 1, "slightli": [1, 6, 7, 8], "clearer": [1, 3, 5], "human": 1, "reader": [1, 7], "maintain": 1, "evolv": 1, "rememb": [1, 2, 3, 4, 5, 6, 7], "zero_mul": [1, 4, 5, 6], "By": [1, 3, 5, 6], "neg_eq_of_add_eq_zero": 1, "eq_neg_of_add_eq_zero": 1, "neg_zero": 1, "neg_neg": 1, "had": [1, 6], "annot": [1, 2, 3, 4, 5, 6], "third": [1, 2, 3, 5, 7], "specifi": [1, 2, 3, 4, 5, 7, 8, 9], "imposs": 1, "default": [1, 2, 3, 4, 5, 6, 8], "subtract": [1, 4, 5], "provabl": [1, 3, 6, 7], "sub_eq_add_neg": 1, "On": [1, 2, 3, 5, 6, 7, 9], "defin": [1, 2, 3, 4, 6, 7, 8, 9, 11], "reflex": [1, 2], "present": [1, 2, 4, 7], "forc": [1, 2, 3], "unfold": [1, 2, 3, 4, 5, 7], "deal": [1, 2, 3, 4, 5, 7], "equat": [1, 2, 3, 4, 5], "interchang": 1, "self_sub": 1, "effort": [1, 4], "one_add_one_eq_two": 1, "norm_num": [1, 2, 4, 5], "strength": 1, "weaker": [1, 2], "notion": [1, 2, 3, 4, 5, 7, 8, 9], "addgroup": [1, 5], "otherwis": [1, 2, 3, 4, 5], "addcommgroup": 1, "commgroup": 1, "g": [1, 2, 3, 5, 6, 7, 8, 9], "mul_left_inv": [1, 5], "\u00b9": [1, 3, 5, 6, 7], "cocki": 1, "helper": 1, "along": [1, 4, 7], "mul_right_inv": [1, 5], "mul_inv_rev": 1, "non": [1, 3, 6, 7, 8, 9], "abel": 1, "noncomm_r": 1, "seem": [1, 2, 4, 6, 7, 8], "odd": [1, 2, 3, 4], "partli": [1, 6], "histor": 1, "conveni": [1, 2, 3, 5, 6, 7], "great": [1, 5], "sort": [1, 3, 4], "inequ": [1, 2, 6, 7], "le": [1, 5, 6], "whenev": [1, 2, 4, 5], "consid": [1, 2, 3, 4, 5, 6, 7, 8, 9], "le_refl": [1, 2], "le_tran": [1, 2], "detail": [1, 2, 3, 4, 5, 6], "unless": [1, 2, 5], "realli": [1, 2, 3, 4, 6, 7], "insist": [1, 6], "discuss": [1, 2, 4, 5, 6, 7, 8], "implic": [1, 7, 11], "h\u2080": [1, 2, 3, 4, 7], "dot": [1, 7], "option": [1, 2, 4, 5, 6, 7], "within": [1, 2, 7], "visibl": 1, "must": [1, 5, 6, 7], "decreas": [1, 5], "fourth": [1, 2], "mode": [1, 2, 5], "entir": [1, 3, 5, 7, 8], "lt_of_le_of_lt": [1, 2], "lt_of_lt_of_l": 1, "lt_tran": [1, 2], "togeth": [1, 2, 3, 4, 5, 7], "handl": [1, 3, 4, 6], "arithmet": 1, "5": [1, 2, 5, 7, 8], "pass": [1, 5], "exp_le_exp": 1, "mpr": [1, 2, 5, 7], "exp": [1, 3], "applic": [1, 2, 4, 5, 9], "function": [1, 2, 4, 5, 6, 8, 9, 11], "compound": [1, 2, 7], "pars": [1, 3], "exp_lt_exp": 1, "log_le_log": 1, "log": [1, 3, 9], "log_lt_log": 1, "add_le_add": [1, 2], "add_le_add_left": 1, "add_le_add_right": 1, "add_lt_add_of_le_of_lt": 1, "add_lt_add_of_lt_of_l": 1, "add_lt_add_left": 1, "add_lt_add_right": 1, "add_nonneg": [1, 5], "add_po": 1, "add_pos_of_pos_of_nonneg": 1, "exp_po": [1, 3], "bi": [1, 5, 11], "lr": 1, "iff": [1, 3, 7, 8, 9], "connect": [1, 3, 5, 7], "equival": [1, 2, 3, 4, 5, 7, 8, 9], "mp": [1, 2, 3, 4, 7], "forward": [1, 2, 5, 7], "direct": [1, 2, 3, 6, 7, 8], "stand": [1, 2, 5, 7, 8], "modu": 1, "ponen": 1, "respect": [1, 2, 3, 4, 5, 7], "thu": [1, 3, 4, 5, 7], "again": [1, 2, 3, 4, 5, 6, 7], "numer": [1, 4, 5], "constitut": 1, "part": [1, 2, 3, 4, 5, 6, 7, 9], "strategi": [1, 2, 4], "api": 1, "reli": [1, 2, 3, 5, 7], "guess": [1, 2, 3, 4, 5], "cmd": [1, 2], "mac": [1, 2], "a_of_b_of_c": 1, "approxim": 1, "loud": 1, "probabl": [1, 5, 6, 7], "add_l": 1, "choic": [1, 2, 3, 5, 7], "exist": [1, 2, 3, 6, 7], "jump": [1, 4, 5, 7], "nearbi": [1, 4], "sq_nonneg": 1, "delet": [1, 2, 3, 4], "uncom": 1, "previou": [1, 2, 3, 5, 6, 7, 8, 9], "confirm": [1, 2, 3, 4], "finish": [1, 2, 3, 4], "job": 1, "pow_two_nonneg": [1, 2], "tend": [1, 7], "around": [1, 3, 6, 7, 9], "binari": [1, 2, 4, 5, 6], "increas": 1, "worth": [1, 2, 5], "definition": [1, 4, 5, 6, 7], "principl": [1, 2, 3, 4, 6, 8], "favor": [1, 5], "timesav": 1, "clever": 1, "involv": [1, 2, 4, 5, 6, 7], "nice": [1, 2, 4, 6, 7], "idea": [1, 2, 3, 5, 6, 7], "abs_l": [1, 5], "congratul": [1, 2, 4], "min": [1, 2, 7, 9], "uniqu": [1, 2, 3, 4, 5, 7], "min_le_left": 1, "min_le_right": 1, "le_min": 1, "max": [1, 2, 6, 7, 9], "pair": [1, 2, 4, 5, 7], "act": 1, "curri": 1, "logician": 1, "haskel": 1, "bind": [1, 3], "tighter": [1, 3], "infix": [1, 6], "le_antisymm": [1, 2], "usag": 1, "inconsist": 1, "outer": 1, "level": [1, 2, 6], "nest": [1, 2], "bother": [1, 3], "repetit": [1, 6], "foreshadow": 1, "univers": [1, 3, 5, 7, 11], "quantifi": [1, 3, 4, 5, 7, 11], "desir": [1, 3, 6, 7], "implicitli": [1, 2], "mani": [1, 2, 3, 5, 6, 7, 8, 9, 11], "whether": [1, 2, 3, 4, 6, 7], "Of": [1, 2, 4, 6, 7, 8, 9], "interest": [1, 2, 3, 5, 6, 7], "vice": [1, 3], "versa": [1, 3], "word": [1, 2, 3, 4, 5, 7], "switch": [1, 6], "transit": [1, 2, 5, 7], "total": 1, "satisfi": [1, 3, 4, 5, 6, 7, 8], "disjunct": [1, 3, 11], "stick": [1, 2, 7, 8], "split": [1, 2, 3, 4], "aux": [1, 2, 4, 7], "valu": [1, 2, 3, 4, 5, 6, 7, 8, 9], "yield": [1, 2, 3, 4, 5, 7], "made": [1, 2, 3, 5, 7], "manifest": [1, 7], "triangl": [1, 2, 5], "abs_add": [1, 2], "sub_add_cancel": [1, 5], "relat": [1, 2, 3, 5, 6, 7, 8, 9], "divis": [1, 2, 4, 5, 6], "ordinari": [1, 2, 4, 5, 7], "unicod": [1, 3, 6], "obtain": [1, 2, 4, 5, 7, 8], "dvd": 1, "dvd_tran": 1, "dvd_mul_of_dvd_left": 1, "dvd_mul_left": 1, "expon": 1, "expand": [1, 2, 3, 4, 5], "w": [1, 6], "greatest": [1, 5, 7], "divisor": [1, 2, 4, 5], "gcd": [1, 2, 4], "least": [1, 5, 6, 7], "lcm": 1, "analog": [1, 2, 3, 4, 5, 7, 8], "divid": [1, 2, 4, 5], "gcd_zero_right": 1, "gcd_zero_left": 1, "lcm_zero_right": 1, "lcm_zero_left": 1, "dvd_antisymm": 1, "complain": 1, "ambigu": [1, 5], "_root_": [1, 4], "saw": [1, 5, 6, 7], "govern": [1, 5], "class": [1, 4, 5, 6, 7, 8, 9], "\u03b1": [1, 2, 3, 4, 5, 6, 7, 8, 9], "partialord": [1, 2], "adopt": 1, "letter": [1, 5, 8], "\u03b2": [1, 2, 3, 5, 6, 7, 9], "\u03b3": [1, 2, 5, 7], "greek": [1, 4], "especi": [1, 2, 5, 6, 7], "strict": [1, 2], "somewhat": [1, 3, 7], "lt_irrefl": [1, 2], "lt_iff_le_and_n": 1, "lattic": [1, 5, 6, 7], "inf_le_left": [1, 7], "inf_le_right": 1, "le_inf": 1, "le_sup_left": 1, "le_sup_right": 1, "sup_l": 1, "lower": [1, 2, 4], "bound": [1, 2, 3, 4, 5, 7, 8, 9], "upper": [1, 2], "glb": 1, "lub": 1, "infimum": [1, 6, 7, 9], "supremum": [1, 4, 6], "inf": [1, 6, 7], "sup": [1, 4, 7], "further": [1, 7], "matter": [1, 2], "meet": [1, 2, 3, 5], "keep": [1, 5, 6], "dictionari": 1, "subset": [1, 2, 3, 5, 7, 8], "domain": [1, 2, 3, 4, 5, 7], "boolean": 1, "truth": [1, 4], "fals": [1, 2, 3, 4, 6], "true": [1, 2, 3, 6, 7], "posit": [1, 3, 4, 5, 7, 9], "subspac": [1, 6], "vector": [1, 3, 6, 8], "intersect": [1, 3, 5, 6, 7, 9], "sum": [1, 2, 4, 5, 6, 7], "inclus": [1, 3, 7], "topolog": [1, 5, 6, 8, 11], "union": [1, 3, 4, 5, 6, 8, 9], "inf_comm": 1, "inf_assoc": 1, "sup_comm": 1, "sup_assoc": 1, "absorpt": 1, "law": 1, "absorb1": 1, "absorb2": 1, "found": [1, 5, 8], "inf_sup_self": 1, "sup_inf_self": 1, "distriblattic": 1, "inf_sup_left": 1, "inf_sup_right": 1, "sup_inf_left": 1, "sup_inf_right": 1, "shown": [1, 5, 8, 9], "explicit": [1, 2, 5, 6, 7], "nondistribut": 1, "finit": [1, 3, 4, 5, 7, 8, 9], "impli": [1, 2, 3, 4, 5, 7], "larger": [1, 7], "carrier": [1, 5, 6], "compat": [1, 7], "strictorderedr": 1, "mul_po": [1, 4], "mul_nonneg": 1, "coupl": [1, 2, 6, 7], "metric": [1, 5, 8, 11], "equip": [1, 3, 5, 6, 7, 8, 9], "distanc": [1, 2, 7, 8], "dist": [1, 7], "map": [1, 2, 3, 5, 6, 7], "metricspac": [1, 7, 8], "dist_self": 1, "dist_comm": [1, 7], "dist_triangl": [1, 7], "nonneg": [1, 5], "nonneg_of_mul_nonneg_left": 1, "dist_nonneg": [1, 7], "dealt": 2, "simpl": [2, 4, 5, 6, 8], "absolut": 2, "\u03b5": [2, 7, 8], "though": [2, 3, 4, 5], "treat": [2, 3, 5, 6, 7, 8], "appli": [2, 3, 4, 5, 6, 7, 8, 9, 11], "my_lemma": 2, "\u03b4": [2, 7], "hb": [2, 7], "subsequ": [2, 4, 7], "lemma": [2, 4, 5, 6, 7, 8, 9, 11], "mention": [2, 3, 5, 6, 7], "my_lemma2": 2, "stage": [2, 5, 6], "my_lemma3": 2, "epo": 2, "ele1": 2, "xlt": 2, "ylt": 2, "essenti": [2, 3, 5, 7], "colon": 2, "off": [2, 3, 4], "my_lemma4": 2, "abs_mul": 2, "mul_le_mul": 2, "abs_nonneg": 2, "mul_lt_mul_right": 2, "extract": [2, 7], "hidden": 2, "expos": [2, 7], "predic": [2, 3, 4, 6, 7, 8], "fnub": 2, "fnlb": 2, "lambda": [2, 5], "hfa": 2, "hgb": 2, "dsimp": [2, 3, 4, 5], "simplif": [2, 3, 4], "contract": 2, "anyhow": 2, "control": 2, "transform": [2, 3], "rest": [2, 3, 5, 7], "routin": 2, "nnf": 2, "nng": 2, "hfb": 2, "nna": 2, "codomain": [2, 4, 7], "structur": [2, 4, 6, 7, 8, 9, 11], "monoid": [2, 3, 4, 6], "fnub_add": 2, "orderedcanceladdcommmonoid": 2, "high": 2, "monoton": [2, 6, 7], "nondecreas": [2, 4], "placehold": 2, "Or": [2, 3], "backward": [2, 7], "subgoal": 2, "mf": 2, "mg": 2, "aleb": 2, "flag": [2, 3], "squiggli": 2, "marker": 2, "nnc": 2, "bbb": [2, 5], "fneven": 2, "fnodd": 2, "ef": 2, "eg": 2, "og": 2, "shorten": 2, "rid": 2, "won": [2, 4, 6, 7], "cannot": [2, 3, 4, 5, 6, 7], "contrari": 2, "syntact": 2, "reduct": [2, 3], "erw": 2, "harder": 2, "spot": 2, "manipul": [2, 5, 7], "foundat": [2, 3, 4, 5], "mundan": 2, "assert": [2, 3, 6], "contrast": [2, 3, 5, 6, 7], "zermelo": 2, "fraenkel": 2, "sin": [2, 8], "co": 2, "zf": 2, "defect": [2, 6, 7], "theoret": [2, 3, 7], "motiv": 2, "detect": 2, "meaningless": 2, "independ": [2, 3, 5], "continuum": 2, "meta": [2, 6], "beyond": [2, 6, 8], "ask": [2, 4, 5, 6, 7], "xs": [2, 3], "refl": [2, 3, 5, 6], "tran": [2, 4, 5, 6], "setub": 2, "inject": [2, 3, 4, 6, 7], "x_1": [2, 3], "x_2": [2, 3], "x\u2081": [2, 3, 5, 7], "x\u2082": [2, 3, 5], "add": [2, 4, 5, 6, 7, 8], "nonzero": [2, 4, 5, 9], "sourc": [2, 7], "inspir": 2, "add_left_inj": 2, "composit": [2, 3, 5, 6, 7], "injg": 2, "injf": [2, 3], "canon": [2, 3, 4, 5], "exhibit": [2, 7], "anonym": [2, 3, 4, 5], "constructor": [2, 3, 4, 5, 6], "angl": 2, "certain": [2, 6, 7], "fnhasub": 2, "fnhaslb": 2, "ubf": 2, "ubg": 2, "rcase": [2, 3, 4, 5, 7], "ubfa": 2, "ubgb": 2, "unpack": [2, 3], "main": [2, 6, 7, 8], "els": [2, 3, 4], "turn": [2, 3, 4, 5, 6, 7, 8], "fn_ub_add": 2, "directli": [2, 4, 5, 6, 7], "lbf": 2, "lbg": 2, "recurs": [2, 3, 5, 11], "arbitrarili": [2, 7], "assign": [2, 3, 5, 6], "compon": [2, 3, 5, 7, 9], "destruct": 2, "produc": [2, 8], "tag": [2, 3, 6], "chosen": [2, 5], "intern": [2, 5], "primit": [2, 3], "bulid": 2, "scientist": 2, "sight": [2, 6], "hurt": 2, "chanc": 2, "yourself": [2, 5], "compani": 2, "old": [2, 5, 6], "chestnut": 2, "product": [2, 4, 5, 6, 7, 9], "magic": [2, 5, 6], "verifi": 2, "sumofsquar": 2, "sumofsquares_mul": 2, "sosx": 2, "sosi": 2, "xeq": [2, 3], "yeq": 2, "insight": 2, "gaussian": [2, 11], "i": [2, 3, 4, 5, 7, 8, 9], "sqrt": [2, 3, 4, 5], "norm": [2, 5, 7, 11], "reflect": 2, "di": [2, 5], "xy": [2, 5], "cryptic": 2, "easiest": [2, 4], "perspicu": 2, "6": [2, 4, 5, 6, 7, 8], "divab": 2, "divbc": 2, "beq": 2, "ceq": 2, "And": [2, 4, 6, 7], "pretti": [2, 6, 7], "Then": [2, 3, 5, 6, 7, 9], "divac": 2, "alpha": [2, 3], "beta": [2, 3], "surject": [2, 3, 7], "mul_div_cancel": [2, 4], "field_simp": [2, 5], "denomin": [2, 4, 5], "hx": [2, 3, 5, 6, 8], "surjg": 2, "surjf": [2, 3], "contradict": [2, 3, 4], "speak": [2, 5, 7], "irreflex": 2, "asymmetri": 2, "lt_asymm": 2, "sugar": 2, "eventu": [2, 3, 7], "fnuba": 2, "not_le_of_gt": 2, "not_lt_of_g": [2, 4, 5], "lt_of_not_g": 2, "le_of_not_gt": 2, "snippet": [2, 4, 5], "counterexampl": [2, 8], "monof": 2, "four": [2, 5], "valid": 2, "far": [2, 3, 6, 7], "q": [2, 4, 5, 6, 7], "straightforward": [2, 6], "difficult": [2, 6], "conclud": [2, 8], "nonexist": 2, "contradictori": 2, "classic": [2, 3, 4], "by_contra": [2, 4], "not_not": 2, "front": 2, "push": [2, 4, 7], "inward": 2, "facilit": [2, 7], "push_neg": [2, 3, 4], "restat": [2, 6], "contrapos": [2, 3, 4], "similarli": [2, 3, 4, 5], "yet": [2, 3, 4, 5, 6, 7], "semicolon": [2, 4], "falso": 2, "anyth": [2, 5, 7], "elim": 2, "strang": [2, 4], "fairli": 2, "reach": [2, 6], "37": 2, "exfalso": 2, "absurd": [2, 4], "slick": 2, "drop": 2, "manner": [2, 5], "techniqu": [2, 7], "variou": [2, 3, 5, 6, 9], "xltz": 2, "zlty": 2, "10": 2, "7": [2, 4], "behav": [2, 3, 6, 7], "roughli": [2, 3, 4], "friend": [2, 5], "were": [2, 4, 5, 7], "inscrut": [2, 3], "gadget": [2, 7], "auxiliari": [2, 7], "pow_eq_zero": [2, 4], "doubl": [2, 3], "symmetr": [2, 3], "abs_lt": 2, "dvd_gcd_iff": 2, "8": [2, 4, 7], "15": 2, "not_monotone_iff": 2, "antisymmetr": 2, "aris": 2, "preorder": [2, 6, 7], "pre": 2, "lt_iff_le_not_l": 2, "repeatedli": [2, 7], "instanti": [2, 5, 6, 7], "inl": [2, 3], "inr": [2, 3], "branch": [2, 3, 6], "le_or_gt": 2, "abs_of_nonneg": [2, 5], "abs_of_neg": 2, "against": 2, "immedi": [2, 3, 5, 6], "attract": 2, "closer": [2, 7], "advantag": [2, 3, 4, 5, 8], "caess": 2, "myab": 2, "le_abs_self": 2, "neg_le_abs_self": 2, "enjoi": [2, 3, 4, 7], "pun": 2, "lt_ab": 2, "genuin": 2, "vertic": [2, 5], "lt_trichotomi": 2, "xgt": 2, "dvd_mul_right": [2, 4], "eq_zero_or_eq_zero_of_mul_eq_zero": 2, "zero": [2, 3, 4, 5, 6, 7, 8, 9], "nontrivi": [2, 3, 4, 5, 7], "integr": [2, 8, 11], "isdomain": 2, "em": [2, 3], "exclud": [2, 4], "by_cas": [2, 3, 4], "dispos": 2, "s_0": [2, 3], "s_1": 2, "s_2": 2, "ldot": [2, 3, 4], "varepsilon": [2, 7], "s_n": [2, 3], "render": [2, 4], "convergesto": 2, "ext": [2, 3, 4, 5, 6], "enabl": [2, 3, 4, 5], "actual": [2, 3, 4, 6, 7], "u": [2, 3, 5, 7, 9], "v": [2, 3, 5, 7], "congr": 2, "reconcil": 2, "peel": 2, "ab": [2, 5], "convert": [2, 4], "quit": [2, 6, 7], "zero_lt_on": [2, 4], "fill": [2, 3, 4, 5], "convergesto_const": 2, "\u03b5po": [2, 7], "nge": 2, "abs_zero": 2, "save": 2, "troubl": [2, 3, 5], "pen": 2, "paper": [2, 3, 5, 7, 9], "ns": 2, "nt": 2, "maximum": [2, 4, 7], "implement": [2, 5, 6, 8], "convergesto_add": 2, "cs": 2, "ct": 2, "clean": [2, 7], "\u03b52po": 2, "hs": [2, 4, 7, 9], "ht": 2, "le_of_max_le_left": 2, "le_of_max_le_right": 2, "tricki": [2, 3, 4, 6], "convergesto_mul_const": 2, "acpo": 2, "abs_po": 2, "exists_abs_le_of_convergesto": 2, "strong": [2, 4], "n\u2080": 2, "bpo": [2, 7], "pos\u2080": 2, "div_po": 2, "n\u2081": 2, "convergesto_mul": 2, "sketch": [2, 3, 4, 7], "limit": [2, 6, 7], "bold": 2, "scratch": 2, "convergesto_uniqu": 2, "sa": 2, "sb": 2, "abn": 2, "na": 2, "hna": 2, "nb": 2, "hnb": 2, "absa": 2, "absb": 2, "observ": [2, 4, 7], "everywher": [2, 3, 6, 7, 9], "linearord": 2, "vastli": 2, "awai": [2, 5], "vocabulari": 3, "uniform": [3, 7, 8], "conceptu": 3, "overload": 3, "verbos": 3, "system": [3, 4, 5, 6], "wrong": 3, "ss": 3, "sub": [3, 7, 9, 11], "cap": 3, "un": 3, "cup": 3, "univ": [3, 7, 8, 9], "empti": [3, 4, 5, 7, 9], "member": [3, 7], "membership": [3, 4, 6], "mem": 3, "notin": 3, "ident": [3, 4, 5, 6, 7, 11], "databas": [3, 4, 6, 7], "unlik": [3, 4], "existenti": [3, 11], "subset_def": 3, "inter_def": 3, "mem_setof": 3, "xu": 3, "mem_inter_iff": 3, "xsu": 3, "phenomenon": 3, "quirk": 3, "process": 3, "pitfal": 3, "heavili": [3, 7], "fall": 3, "union_def": 3, "mem_union": [3, 4], "xtu": 3, "xt": 3, "unnecessari": 3, "correctli": 3, "special": [3, 4, 5, 6, 7, 9], "rewritten": 3, "diff_eq": 3, "mem_diff": 3, "xstu": 3, "xnt": 3, "xnu": 3, "extension": [3, 5], "unsurprisingli": 3, "harm": 3, "and_comm": 3, "antisymm": 3, "hood": [3, 5], "builder": 3, "trivial": [3, 4, 7], "eq_two_or_odd": 3, "even_iff": 3, "confus": [3, 4, 6, 7], "fortun": 3, "agre": 3, "prime_iff": 3, "symm": [3, 4, 5, 6, 7, 8], "rwa": [3, 4, 5], "restrict": [3, 4, 7], "signific": 3, "ball": [3, 8], "bex": 3, "bex_def": 3, "prime_x": 3, "slight": 3, "ssubt": 3, "index": [3, 6, 7], "model": [3, 7], "sequenc": [3, 6, 7, 8, 11], "a_0": 3, "a_1": 3, "a_2": 3, "mem_iunion": 3, "xai": 3, "mem_iint": 3, "mem_iunion\u2082": 3, "mem_iinter\u2082": 3, "exists_prime_and_dvd": 3, "eq_univ": 3, "eq_univ_of_foral": 3, "exists_infinite_prim": 3, "\u2080": 3, "sunion": 3, "sinter": 3, "relationship": [3, 4], "sunion_eq_biunion": 3, "sinter_eq_biint": 3, "preimag": [3, 7], "imag": [3, 4, 6, 7], "tripl": 3, "mem_image_of_mem": 3, "galoi": [3, 5, 7], "image_subset_iff": 3, "represent": [3, 4, 5], "asid": 3, "raini": 3, "dai": 3, "behavior": [3, 6, 7], "nonempti": [3, 7], "condit": [3, 4, 6, 7, 8], "fxeq": 3, "ai": 3, "fx": 3, "eq": [3, 5], "injon": [3, 9], "theme": 3, "rel": [3, 5], "relativ": 3, "xpo": 3, "ypo": 3, "exp_log": 3, "ingredi": [3, 5, 7, 8], "inhabit": [3, 5, 7], "appeal": [3, 6], "choose_spec": 3, "noncomput": [3, 5], "inverse_spec": 3, "dif_po": 3, "dif_neg": 3, "fulli": [3, 7], "alon": 3, "leftinvers": 3, "rightinvers": 3, "hack": 3, "half": 3, "dozen": 3, "condens": 3, "cantor": 3, "famou": 3, "j": [3, 5], "intuit": [3, 7], "cardin": 3, "biject": [3, 5], "nineteenth": 3, "centuri": 3, "infinit": [3, 7, 11], "dedekind": 3, "quickli": [3, 9], "behind": 3, "problem": [3, 4, 5, 6, 7], "shade": 3, "region": 3, "diagram": 3, "circ": [3, 5], "scale": 3, "inner": 3, "smaller": [3, 4, 7], "concentr": 3, "unshad": 3, "compos": [3, 5, 7], "disjoint": [3, 9], "sound": [3, 5, 6], "plausibl": 3, "delic": 3, "improv": [3, 4], "confid": 3, "better": [3, 4, 5, 6, 7], "invfun": [3, 5], "leftinverse_invfun": 3, "invfun_eq": 3, "sbaux": 3, "sbset": 3, "sb_aux": 3, "s_": 3, "sb_set": 3, "bigcup_": 3, "mathbb": [3, 4, 5], "sbfun": 3, "complement": [3, 7, 9], "outermost": 3, "setminu": 3, "inv_fun": 3, "inv_fun_eq": 3, "sb_right_inv": 3, "goe": [3, 4, 5, 6, 7], "neither": [3, 5, 6], "nor": [3, 5], "sb_inject": 3, "hf": [3, 7, 8, 9], "hg": [3, 7, 8, 9], "a_def": 3, "h_def": 3, "hxeq": 3, "xa": [3, 5], "wlog": 3, "x\u2081a": 3, "resolve_left": 3, "x\u2082a": 3, "not_imp_self": 3, "x\u2082na": 3, "if_po": 3, "if_neg": 3, "x\u2082eq": 3, "hn": [3, 4, 7, 8], "sb_fun": 3, "bring": [3, 4, 7], "tradeoff": 3, "encapsul": [3, 5, 8], "symmetri": [3, 6], "dwell": 3, "succ": [3, 4, 6], "sb_surject": 3, "gya": 3, "xmem": 3, "sweet": 3, "schroeder_bernstein": 3, "substant": 4, "ancient": 4, "fraction": 4, "lowest": 4, "2c": 4, "4c": 4, "factor": [4, 5], "coprim": 4, "smart": 4, "12": 4, "encount": [4, 6], "algebra": [4, 6, 7, 8, 9, 11], "prime_def_lt": 4, "eq_one_or_self_of_dvd": 4, "prime_p": 4, "17": 4, "commonli": [4, 5], "prime_two": 4, "prime_thre": 4, "broader": [4, 8], "irreduc": [4, 5], "coincid": [4, 5, 7], "rise": [4, 6], "dvd_mul": 4, "even_of_even_sqr": 4, "dvd_of_dvd_pow": 4, "proce": [4, 6], "profici": 4, "prefix": [4, 6], "search": [4, 5, 6], "engin": 4, "hesit": 4, "mul_right_inj": 4, "heart": 4, "irration": 4, "dvd_gcd": 4, "coprime_mn": 4, "sqr_eq": 4, "meq": 4, "dvd_iff_exists_eq_mul_left": 4, "two_l": 4, "le_of_dvd": 4, "approach": [4, 5, 6, 7], "quick": [4, 8], "ne": [4, 5], "occur": 4, "suffici": [4, 7], "permut": 4, "prime_of_mem_factor": 4, "prod_factor": 4, "factors_uniqu": 4, "talk": [4, 7, 8], "factorization_mul": 4, "mnez": 4, "nnez": 4, "factorization_pow": 4, "black": [4, 6], "box": 4, "simpa": [4, 8], "nnz": 4, "nsqr_nez": 4, "eq1": 4, "eq2": 4, "add_mul_mod_self_left": 4, "mul_mod_right": 4, "count_factors_mul_of_po": 4, "successor": 4, "succ_ne_zero": 4, "npow_nz": 4, "dvd_sub": 4, "pow_eq": 4, "npowz": 4, "add_sub_cancel": 4, "understood": [4, 7], "quotient": [4, 5, 6, 7], "pictur": [4, 5], "mediat": 4, "headach": 4, "contend": 4, "issu": [4, 5, 6, 7], "th": 4, "topic": [4, 6], "enat": 4, "infin": [4, 7, 9], "appreci": 4, "role": [4, 5, 7], "datatyp": 4, "freeli": 4, "translat": [4, 6, 7], "mathematician": [4, 7], "inj": 4, "factori": 4, "fac": 4, "ih": 4, "fac_po": 4, "succ_po": 4, "dvd_fac": 4, "ipo": 4, "il": 4, "of_le_succ": 4, "dvd_mul_of_dvd_right": 4, "crude": 4, "remaind": [4, 5], "pow_two_le_fac": 4, "finset": [4, 5, 7], "bigoper": [4, 5], "prod": [4, 7, 9], "sum_range_zero": 4, "sum_range_succ": 4, "summat": 4, "prod_range_zero": 4, "prod_range_succ": 4, "deserv": 4, "danger": [4, 5], "ordinarili": [4, 5], "loop": 4, "indefinit": 4, "fix": [4, 6, 7], "placement": 4, "re": [4, 5], "handi": 4, "sum_id": 4, "div_eq_of_eq_mul_right": 4, "succ_eq_add_on": 4, "sum_sqr": 4, "mynat": 4, "thumb": 4, "decid": [4, 7], "preced": 4, "truncat": 4, "exponenti": 4, "cut": 4, "predecessor": 4, "pred": 4, "mul": [4, 5, 6, 7], "succ_add": 4, "succ_mul": 4, "explor": [4, 7], "standard": [4, 5, 6, 7], "formul": [4, 7], "quirki": 4, "among": 4, "annoi": [4, 6], "h0": 4, "succ_le_succ": 4, "zero_l": [4, 5], "interval_cas": 4, "interv": [4, 7, 9], "decis": 4, "procedur": [4, 6], "revert": [4, 5], "minfac": 4, "smallest": [4, 6, 7], "strong_induction_on": 4, "subsum": 4, "exists_prime_factor": 4, "np": 4, "mltn": 4, "mdvdn": 4, "mne1": 4, "mz": 4, "zero_dvd_iff": 4, "mgt2": 4, "pp": 4, "pdvd": 4, "factorial_po": 4, "dvd_factori": 4, "primes_infinit": 4, "refin": [4, 8], "ple": 4, "p_1": 4, "p_n": 4, "prod_": 4, "p_i": [4, 7], "computation": 4, "test": 4, "decidableeq": 4, "abandon": 4, "ourselv": [4, 6], "subset_iff": 4, "mem_int": 4, "mem_sdiff": 4, "tauto": 4, "dispens": 4, "tautolog": 4, "dvd_prod_of_mem": 4, "eq_of_dvd_of_prim": 4, "prime_q": 4, "preserv": [4, 6, 7], "induction_on": 4, "singleton": 4, "prod_empti": 4, "prod_insert": 4, "mem_of_dvd_prod_prim": 4, "mem_insert": 4, "wrote": 4, "filter": [4, 8, 9, 11], "mem_filt": 4, "aim": 4, "prod_po": 4, "_def": 4, "mem_": 4, "id": [4, 6, 7, 8], "bounded_of_ex_finset": 4, "qk": 4, "lt_succ_of_l": 4, "le_sup": 4, "ex_finset_of_bound": 4, "decidablepr": 4, "lt_succ_iff": 4, "congruent": 4, "p_k": 4, "loss": 4, "27": 4, "mod_4_eq_3_or_mod_4_eq_3": 4, "mul_mod": 4, "mod_lt": 4, "hm": [4, 8], "two_le_of_mod_4_eq_3": 4, "neq": 4, "div_dvd_of_dvd": 4, "div_lt_self": 4, "exists_prime_factor_mod_4_eq_3": 4, "dvd_rfl": 4, "mge2": 4, "home": [4, 5], "stretch": [4, 5], "remov": [4, 7], "eras": 4, "mem_eras": 4, "readi": [4, 6, 7, 8], "dvd_add_iff_left": 4, "primes_mod_4_eq_3_infinit": 4, "p4": 4, "pltn": 4, "p4eq": 4, "ps": 4, "pne3": 4, "seriou": [4, 6, 7], "feat": 4, "modern": 5, "subject": 5, "mysteri": [5, 6], "consult": 5, "ann": 5, "baanen": 5, "abus": 5, "paramet": [5, 6], "broadest": 5, "constraint": [5, 7], "bundl": [5, 6, 7, 8], "tupl": 5, "hy": [5, 6], "hz": [5, 6], "mypoint1": 5, "mypoint2": 5, "mypoint3": 5, "mk": [5, 6, 7], "former": 5, "latter": [5, 7], "quot": [5, 7], "protect": 5, "add_x": 5, "addalt": 5, "etc": [5, 7], "y\u2081": 5, "z\u2081": 5, "y\u2082": 5, "z\u2082": 5, "addalt_x": 5, "addalt_comm": 5, "ya": 5, "za": 5, "xb": 5, "yb": 5, "zb": 5, "apart": [5, 6], "effici": [5, 7], "scalar": [5, 6, 8], "smul": [5, 6], "smul_distrib": 5, "road": 5, "link": [5, 6], "belong": [5, 6, 7], "simplex": 5, "convinc": 5, "equilater": 5, "interior": [5, 8], "standardtwosimplex": 5, "x_nonneg": 5, "y_nonneg": 5, "z_nonneg": 5, "sum_eq": 5, "swap": 5, "swapxi": 5, "interestingli": [5, 8], "midpoint": 5, "div_nonneg": 5, "weight": 5, "averag": 5, "weightedaverag": 5, "lambda_nonneg": 5, "lambda_l": 5, "fin": [5, 9], "standardsimplex": 5, "sum_eq_on": 5, "div_eq_mul_inv": 5, "sum_mul": 5, "sum_add_distrib": 5, "mul_sum": 5, "islinear": 5, "is_addit": 5, "preserves_mul": 5, "linf": 5, "subtyp": [5, 6, 7], "preal": 5, "val": 5, "sigma": [5, 9], "wherebi": [5, 7], "stdsimplex": 5, "\u03c3": 5, "fst": [5, 7], "snd": [5, 7], "custom": 5, "robust": [5, 6], "interfac": 5, "redefin": [5, 6], "accessor": 5, "weav": 5, "rich": [5, 6], "interconnect": 5, "hierarchi": [5, 11], "clarifi": 5, "antireflex": 5, "cdot": 5, "mathcal": [5, 8], "proxi": 5, "bipartit": 5, "graph": 5, "categori": [5, 7, 8], "morphism": [5, 8, 11], "basi": [5, 7], "discret": [5, 8], "inherit": [5, 6], "polynomi": 5, "coeffici": 5, "dual": [5, 7], "accommod": 5, "almost": [5, 6, 7, 9], "marriag": 5, "heaven": 5, "group\u2081": [5, 6], "inv": [5, 6], "struc": 5, "counterpart": 5, "assur": 5, "groupcat": 5, "group\u2081cat": 5, "str": 5, "capit": 5, "roman": 5, "equiv": 5, "tofun": [5, 6], "right_inv": 5, "left_inv": 5, "creativ": 5, "evid": 5, "coercion": [5, 6, 7, 8], "omit": 5, "perm": 5, "under": [5, 6, 7], "orient": 5, "permgroup": 5, "trans_assoc": 5, "trans_refl": 5, "refl_tran": 5, "self_trans_symm": 5, "grouptheori": 5, "g_1": 5, "g_2": 5, "g_3": 5, "tightli": 5, "isomorph": [5, 8], "Its": [5, 6], "neg": [5, 6, 7, 9], "reproduc": 5, "accompani": 5, "addgroup\u2081": 5, "scheme": 5, "addgrouppoint": 5, "arrang": 5, "mul_inv_cancel_right": 5, "achiev": [5, 6, 7], "silent": [5, 6], "regist": [5, 6], "grp": 5, "contextu": 5, "cue": 5, "synthes": [5, 6], "whole": 5, "_inst_1": 5, "candid": 5, "group\u2082": 5, "mysquar": 5, "my_squar": 5, "remark": [5, 6], "headi": 5, "store": 5, "hasmulgroup\u2082": 5, "hasonegroup\u2082": 5, "hasinvgroup\u2082": 5, "suppli": 5, "accord": 5, "capabl": 5, "chain": 5, "recent": 5, "prioriti": 5, "bad": [5, 6, 7], "artifici": 5, "addgroup\u2082": 5, "subtl": [5, 7], "configur": 5, "invis": [5, 6], "wise": 5, "euclidean": 5, "terminolog": 5, "mid": 5, "imaginari": 5, "gaussint": 5, "im": 5, "pointwis": [5, 7, 8], "root": [5, 6, 11], "ac": 5, "bci": 5, "adi": 5, "bd": 5, "bc": 5, "hasmul": 5, "zero_def": 5, "one_def": 5, "add_def": 5, "neg_def": 5, "mul_def": 5, "zero_r": 5, "zero_im": 5, "one_r": 5, "one_im": 5, "add_r": 5, "add_im": 5, "neg_r": 5, "neg_im": 5, "mul_r": 5, "mul_im": 5, "surprisingli": [5, 6], "concept": [5, 7, 8], "light": 5, "bulb": 5, "skeleton": [5, 7], "scari": 5, "instcommr": 5, "left_distrib": [5, 6], "right_distrib": [5, 6], "ext_iff": 5, "bq": 5, "archetyp": 5, "int": [5, 6], "ediv_add_emod": 5, "emod_nonneg": 5, "emod_lt": 5, "unit": [5, 6, 7], "algorithm": 5, "conjug": 5, "frac": 5, "nearest": 5, "size": 5, "vi": 5, "multipli": 5, "emb": 5, "forth": 5, "quadrat": 5, "gaussianint": 5, "stai": 5, "face": [5, 6, 7], "machineri": [5, 6, 7], "adapt": 5, "invest": 5, "pragmat": 5, "seek": 5, "heather": 5, "macbeth": 5, "eleg": 5, "div": 5, "mod": 5, "_add_mod": 5, "abs_mod": 5, "_le": 5, "emod_lt_of_po": 5, "zero_lt_two": 5, "fixm": 5, "_eq": 5, "sq_add_sq_eq_zero": 5, "linearorderedr": 5, "norm_nonneg": [5, 8], "norm_eq_zero": [5, 8], "norm_po": 5, "norm_mul": [5, 8], "conj": 5, "conj_r": 5, "conj_im": 5, "norm_conj": 5, "bespok": 5, "quad": 5, "record": [5, 6], "div_def": 5, "mod_def": 5, "messi": 5, "nicer": [5, 7], "norm_mod_lt": 5, "norm_y_po": 5, "sq_ab": 5, "gcongr": 5, "ediv_mul_l": 5, "le_of_mul_le_mul_right": 5, "ediv_lt_of_lt_mul": 5, "natab": 5, "coe_natabs_norm": 5, "natabs_of_nonneg": 5, "natabs_norm_mod_lt": 5, "ofnat_lt": 5, "coe_natab": 5, "not_norm_mul_left_lt_norm": 5, "natabs_mul": 5, "le_mul_of_one_le_right": 5, "ofnat_l": 5, "add_one_le_of_lt": 5, "euclideandomain": 5, "quotient_mul_add_remainder_eq": 5, "quotient_zero": 5, "r_wellfound": 5, "remainder_lt": 5, "mul_left_not_lt": 5, "payoff": 5, "principalidealr": 5, "irreducible_iff_prim": 5, "studi": [6, 7], "prematur": 6, "technolog": 6, "simpler": 6, "ring\u2081": 6, "gradual": [6, 7], "bottom": [6, 7], "endow": 6, "one\u2081": 6, "heavier": 6, "inferr": 6, "resolut": 6, "ie": [6, 7], "attribut": 6, "ensur": [6, 7], "self": 6, "one\u2082": 6, "usabl": 6, "silli": 6, "affect": 6, "importantli": 6, "habit": 6, "ascript": 6, "messag": 6, "typeclass": 6, "stuck": 6, "metavari": 6, "263": 6, "auto": 6, "sever": [6, 7, 9], "unknown": 6, "collis": 6, "builtin": 6, "\ud835\udfd9": 6, "inherit_doc": 6, "diamond": 6, "dia\u2081": 6, "dia": 6, "infixl": 6, "70": 6, "semigroup": 6, "dia_assoc": 6, "semigroup\u2081": 6, "todia\u2081": 6, "previous": 6, "semigroup\u2082": 6, "hurdl": 6, "neutral": 6, "diaoneclass\u2081": 6, "one_dia": 6, "dia_on": 6, "trace": 6, "info": 6, "ters": 6, "expend": 6, "attempt": 6, "succe": 6, "success": 6, "set_opt": 6, "synthinst": 6, "monoid\u2081": 6, "hide": [6, 7], "subtleti": 6, "fear": 6, "unrel": 6, "tosemigroup\u2081": 6, "todiaoneclass\u2081": 6, "monoid\u2082": 6, "toone\u2081": 6, "overlap": 6, "tear": 6, "signatur": 6, "restor": 6, "optim": [6, 9], "reusabl": 6, "inv\u2081": 6, "postfix": 6, "inv_dia": 6, "weak": 6, "preliminari": 6, "left_inv_eq_right_inv\u2081": 6, "hba": 6, "hac": 6, "export": 6, "inv_eq_of_dia": 6, "dia_inv": 6, "naiv": [6, 7], "duplic": 6, "to_addit": 6, "semi": 6, "left_inv_eq_right_inv": 6, "left_neg_eq_right_neg": 6, "whatsnew": 6, "addsemigroup\u2083": 6, "add_assoc\u2083": 6, "semigroup\u2083": 6, "mul_assoc\u2083": 6, "addmonoid\u2083": 6, "addzeroclass": 6, "monoid\u2083": 6, "muloneclass": 6, "tomuloneclass": 6, "addcommsemigroup\u2083": 6, "commsemigroup\u2083": 6, "addcommmonoid\u2083": 6, "commmonoid\u2083": 6, "addgroup\u2083": 6, "neg_add": 6, "group\u2083": 6, "inv_mul": 6, "inv_eq_of_mul": 6, "propag": 6, "attr": 6, "mul_inv": 6, "mul_left_cancel\u2083": 6, "mul_right_cancel\u2083": 6, "addcommgroup\u2083": 6, "commgroup\u2083": 6, "demonstr": [6, 7], "opposit": [6, 7], "gain": 6, "besid": 6, "parent": 6, "ring\u2083": 6, "mulzeroclass": 6, "toaddgroup\u2083": 6, "mayb": 6, "claus": 6, "le\u2081": 6, "50": 6, "\u2081": 6, "preorder\u2081": 6, "partialorder\u2081": 6, "orderedcommmonoid\u2081": 6, "modul": 6, "pretend": 6, "smul\u2083": 6, "infixr": 6, "73": 6, "module\u2081": 6, "zero_smul": 6, "one_smul": 6, "mul_smul": 6, "add_smul": 6, "smul_add": 6, "surpris": 6, "toaddcommgroup\u2083": 6, "inst": 6, "module\u2083": 6, "hunt": 6, "unspecifi": 6, "embark": 6, "quest": 6, "huge": 6, "trap": 6, "refus": [6, 7], "tosmul\u2083": 6, "inst_1": 6, "safe": 6, "selfmodul": 6, "invert": 6, "nsmul\u2081": 6, "zsmul\u2081": 6, "ofnat": 6, "negsucc": 6, "intermedi": [6, 7], "abgrpmodul": 6, "failur": 6, "synth": 6, "indirect": 6, "path": 6, "thank": 6, "offend": 6, "poor": 6, "forget": 6, "inria": 6, "hal": 6, "scienc": 6, "02463336": 6, "modifi": 6, "nsmul": 6, "addmonoid\u2084": 6, "nsmul_zero": 6, "nsmul_succ": 6, "mysmul": 6, "stori": 6, "incorpor": 6, "zsmul": 6, "lt\u2081": 6, "comparison": 6, "ismonoidhom\u2081": 6, "unpleas": [6, 7], "conjunct": [6, 11], "chose": 6, "ismonoidhom\u2082": 6, "map_on": 6, "map_mul": 6, "tempt": 6, "higher": 6, "unif": 6, "psycholog": 6, "rare": 6, "adject": 6, "bare": 6, "noun": 6, "argu": 6, "continuous_id": [6, 7], "primari": 6, "monoidhom\u2081": 6, "coefun": 6, "coerc": 6, "coe": 6, "addmonoidhom\u2081": 6, "addmonoid": 6, "map_zero": 6, "map_add": [6, 8], "ringhom\u2081": 6, "minor": [6, 8], "tomonoidhom\u2081": 6, "juggl": 6, "monoidhomclass\u2081": 6, "badinst": 6, "wouldn": 6, "priori": 6, "boil": 6, "hopelessli": 6, "checksynthord": 6, "random": 6, "deduc": [6, 7], "outparam": 6, "trigger": 6, "retri": 6, "monoidhomclass\u2082": 6, "promis": [6, 7], "map_inv_of_inv": 6, "got": 6, "presenc": 6, "layer": [6, 7], "funlik": 6, "monoidhomclass": 6, "monoidhomclass\u2083": 6, "coe_inject": 6, "stop": 6, "ringhomclass\u2083": 6, "ringhom": 6, "algebrahom": 6, "ve": [6, 7], "primarili": [6, 7], "unbundl": 6, "orderpreshom": 6, "le_of_l": 6, "orderpresmonoidhom": 6, "orderpreshomclass": 6, "subgroup": 6, "subr": 6, "reus": 6, "led": 6, "descend": 6, "break": 6, "barrier": 6, "setlik": 6, "wrap": [6, 7], "submonoid\u2081": 6, "submonoid": 6, "mul_mem": 6, "one_mem": 6, "tackl": 6, "setco": 6, "submonoid\u2081monoid": 6, "destructur": 6, "binder": 6, "submonoidclass\u2081": 6, "subgroup\u2081": 6, "subgroupclass\u2081": 6, "subobject": 6, "s\u2081": 6, "s\u2082": 6, "shame": 6, "across": 6, "weird": [6, 7], "distract": 6, "emphas": 6, "anecdot": 6, "devic": 6, "hasquoti": 6, "bewar": 6, "regular": [6, 7], "ascii": 6, "setoid": 6, "commmonoid": 6, "iseqv": 6, "hw": 6, "quotientmonoid": 6, "map\u2082": 6, "calculu": [7, 9, 11], "quantiti": 7, "begun": 7, "paradox": 7, "exot": 7, "x\u2080": [7, 8], "convention": 7, "eight": 7, "varieti": 7, "wish": 7, "64": 7, "y\u2080": 7, "z\u2080": 7, "paragraph": 7, "512": 7, "bourbaki": 7, "spell": 7, "dualli": 7, "neighborhood": 7, "attop": [7, 9], "\ud835\udcdd": [7, 8, 9], "\ud835\udce4": 7, "entourag": 7, "\u03bc": [7, 9], "ae": [7, 9], "univ_set": 7, "sets_of_superset": 7, "inter_set": 7, "blur": 7, "princip": 7, "\ud835\udcdf": 7, "opportun": 7, "x_0": 7, "ioo": [7, 8], "tendsto\u2081": 7, "tendsto": [7, 9], "lim_": 7, "abstractli": 7, "salient": 7, "pushforward": 7, "f_": 7, "tendsto\u2082": 7, "via": 7, "leverag": 7, "map_mono": 7, "map_map": 7, "shot": 7, "256": 7, "pullback": 7, "comap": 7, "map_le_iff_le_comap": 7, "contravari": 7, "comap_comap": 7, "plane": 7, "\u02e2": 7, "nhds_prod_eq": 7, "aforement": 7, "le_inf_iff": 7, "shouldn": 7, "prohibit": 7, "global": 7, "precondit": 7, "closur": 7, "nebot": 7, "tour": [7, 8], "claim": 7, "recaptur": 7, "superfici": 7, "stronger": 7, "famili": [7, 8], "\u03b9": [7, 8, 9], "flexibl": 7, "hasbasi": 7, "nhds_basis_ioo_po": 7, "has_basi": 7, "tendsto_iff": 7, "reformul": 7, "ici": 7, "attop_basi": 7, "knew": 7, "gave": 7, "n_p": 7, "n_q": 7, "tiresom": 7, "\u1da0": [7, 8, 9], "superscript": 7, "hp": 7, "hq": 7, "eventually_eq": 7, "tendsto_congr": 7, "review": 7, "eventually_of_foral": 7, "mono": 7, "item": 7, "filter_upward": 7, "hr": 7, "aka": 7, "occasion": 7, "frequent": 7, "sophist": 7, "mem_closure_of_tendsto": 7, "clusterpt": 7, "mem_closure_iff_clusterpt": 7, "le_principal_iff": 7, "nebot_of_l": 7, "hux": 7, "hum": 7, "dist_eq_zero": 7, "emetricspac": 7, "pseudometricspac": 7, "pseudoemetricspac": 7, "journei": 7, "recast": 7, "tendsto_attop": 7, "continuous_iff": 7, "devot": 7, "uncurri": 7, "slow": 7, "continuous_fst": 7, "comp": 7, "assembl": 7, "prod_mk": 7, "continuous_snd": 7, "continuous_dist": 7, "clunki": 7, "crucial": 7, "elabor": 7, "prod_map": 7, "sad": 7, "border": 7, "obfusc": 7, "continuous_pow": 7, "continuousat": [7, 9], "continuousat_iff": 7, "geometr": 7, "closedbal": 7, "sign": 7, "radiu": 7, "mem_ball_self": 7, "mem_closedball_self": 7, "isopen": 7, "isopen_iff": 7, "Their": [7, 8], "isclos": [7, 8], "s\u1d9c": [7, 9], "isopen_compl_iff": 7, "hu": [7, 8], "mem_of_tendsto": 7, "mem_closure_iff": 7, "mem_closure_iff_seq_limit": 7, "nhds_basis_bal": 7, "nhds_basis_closedbal": 7, "mem_iff": 7, "segment": [7, 9], "somewher": 7, "continuouson": [7, 8], "minimum": 7, "iscompact": 7, "icc": [7, 8], "iscompact_icc": 7, "\u03c6": 7, "strictmono": 7, "tendsto_subseq": 7, "exists_forall_l": 7, "exists_forall_g": 7, "compactspac": 7, "iscompact_univ": 7, "cauchi": 7, "uniformcontinu": 7, "uniformcontinuous_iff": 7, "clearli": 7, "isclosed_l": 7, "eq_empty_or_nonempti": 7, "attain": 7, "cauchyseq": 7, "cauchyseq_iff": 7, "completespac": [7, 8, 9], "cauchyseq_tendsto_of_complet": 7, "criterion": 7, "tendsto_pow_attop_nhds_0_of_lt_1": 7, "dist_le_range_sum_dist": 7, "cauchyseq_of_le_geometric_two": 7, "\u03b5_po": [7, 8], "le_iff_exists_add": 7, "boss": 7, "bair": [7, 8], "exclam": 7, "induct": [7, 11], "rec_on": 7, "ho": 7, "hd": 7, "dens": 7, "densiti": 7, "\u03b4po": 7, "hpo": 7, "hball": 7, "mem_closure_iff_nhds_basi": 7, "recon": 7, "rpo": 7, "rb": 7, "incl": 7, "cdist": 7, "ylim": 7, "yball": 7, "categor": 7, "topologicalspac": [7, 8], "isopen_univ": 7, "isopen_empti": 7, "isopen_iunion": 7, "fintyp": 7, "isopen_iint": 7, "continuous_def": 7, "attach": 7, "filteri": 7, "sent": 7, "mem_nhds_iff": 7, "digress": 7, "pure_le_nhd": 7, "self_of_nhd": 7, "eventually_eventually_nhd": 7, "mkofnhd": 7, "nhds_mkofnhd": 7, "functori": 7, "induc": 7, "sensibl": 7, "uncount": 7, "relatedli": 7, "coinduc": 7, "t_x": 7, "t_y": 7, "coinduced_le_iff_le_induc": 7, "covari": 7, "coinduced_compos": 7, "induced_compos": 7, "focus": 7, "nhd": 7, "topological_structur": 7, "recov": 7, "continuous_iff_coinduced_l": 7, "g_": 7, "t_z": 7, "wasn": 7, "\u03c0": [7, 8], "t_": 7, "x_i": 7, "pi": 7, "price": 7, "patholog": 7, "t2_space": 7, "hausdorff": 7, "t2space": 7, "tendsto_nhds_uniqu": 7, "regularspac": 7, "closed_nhds_basi": 7, "nhds_basis_open": 7, "denseinduc": 7, "continuousat_extend": 7, "funni": 7, "_in": 7, "nhds_induc": 7, "fortiori": 7, "f_cont": 7, "tendsto_right_iff": 7, "firstcountabletopolog": 7, "cluster": 7, "hfx": 7, "push_pul": 7, "of_map": 7, "f_ne": 7, "f_le": 7, "map_eq": 7, "hne": 7, "hle": 7, "huo": 7, "hsu": 7, "elim_finite_subcov": 7, "9": 8, "introductori": 8, "hasderivat": [8, 9], "hasderivat_sin": 8, "differentiable_at": 8, "differentiableat": 8, "inconveni": 8, "deriv_zero_of_not_differentiableat": 8, "deriv_add": 8, "islocalmin": 8, "deriv_eq_zero": 8, "ev": 8, "roll": 8, "weirder": 8, "hab": 8, "hfc": 8, "hfi": 8, "exists_deriv_eq_zero": 8, "differentiableon": 8, "exists_deriv_eq_slop": 8, "normedaddcommgroup": [8, 9], "norm_add_l": 8, "infer_inst": [8, 9], "normed_spac": 8, "normed_add_group": 8, "stipul": 8, "normedspac": [8, 9], "norm_smul": 8, "banach": [8, 9], "dimension": [8, 9], "finitedimension": [8, 9], "\ud835\udd5c": [8, 9], "nontriviallynormedfield": [8, 9], "normedfield": 8, "exists_one_lt_norm": 8, "nondiscret": 8, "continuouslinearmap": 8, "cont": 8, "map_smul": 8, "le_op_norm": 8, "hmp": 8, "op_norm_le_bound": 8, "steinhau": 8, "bounded": 8, "uniformli": 8, "nonempty_interior_of_union_of_clos": 8, "continuous_linear_map": 8, "op_norm_le_of_shel": 8, "interior_subset": 8, "interior_inter_subset": 8, "is_closed_l": 8, "hc": 8, "h\u03b5": 8, "real_norm_l": 8, "\u03b5k_po": 8, "o": 8, "normedgroup": 8, "isbigowith": 8, "isbigowith_iff": 8, "isbigo_iff_isbigowith": 8, "islittleo_iff_forall_isbigowith": 8, "hasfderivat": 8, "fderiv": 8, "fr\u00e9chet": 8, "hff": 8, "iter": 8, "multilinear": 8, "with_top": 8, "infti": 8, "cont_diff": 8, "iteratedfderiv": 8, "withtop": 8, "contdiff": 8, "contdiff_iff_continuous_differenti": 8, "stricter": 8, "hasstrictfderivat": 8, "\ud835\udd42": 8, "isrorc": 8, "contdiffat": 8, "localinvers": 8, "eventually_left_invers": 8, "eventually_right_invers": 8, "to_localinvers": 8, "hasfderivwithinat": [8, 9], "hasfderivatfilt": 8, "measuretheori": 9, "intervalintegr": 9, "integral_id": 9, "integral_one_div": 9, "differenti": [9, 11], "integral_hasstrictderivat_right": 9, "stronglymeasurableatfilt": 9, "volum": 9, "integral_eq_sub_of_hasderivat": 9, "convolut": 9, "bochner": 9, "lebesgu": 9, "measurablespac": 9, "countabl": 9, "encod": 9, "measurableset": 9, "compl": 9, "iunion": 9, "iinter": 9, "measure_eq_iinf": 9, "measure_iunion_l": 9, "hmea": 9, "hdi": 9, "pairwis": 9, "m_iunion": 9, "\u1d50": 9, "integral_add": 9, "ennreal": 9, "toreal": 9, "send": 9, "to_real": 9, "set_integral_const": 9, "domin": 9, "converg": [9, 11], "aestronglymeasur": 9, "hbound": 9, "hlim": 9, "tendsto_integral_of_dominated_converg": 9, "fubini": 9, "sigmafinit": 9, "\u03bd": 9, "integral_prod": 9, "bilinear": 9, "formula": 9, "borelspac": 9, "isaddhaarmeasur": 9, "invari": 9, "mass": 9, "compact": 9, "h_inj": 9, "det": 9, "integral_image_eq_integral_abs_det_fderiv_smul": 9, "overview": 11, "schr\u00f6der": 11, "bernstein": 11, "irrat": 11}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"introduct": 0, "get": 0, "start": 0, "overview": 0, "basic": [1, 6], "calcul": 1, "prove": 1, "ident": 1, "algebra": [1, 5], "structur": [1, 5], "us": 1, "theorem": [1, 3], "lemma": 1, "more": 1, "exampl": 1, "appli": 1, "rw": 1, "fact": 1, "about": 1, "logic": 2, "implic": 2, "univers": 2, "quantifi": 2, "The": [2, 3], "existenti": 2, "negat": 2, "conjunct": 2, "bi": 2, "disjunct": 2, "sequenc": 2, "converg": [2, 7], "set": [3, 7], "function": [3, 7], "schr\u00f6der": 3, "bernstein": 3, "elementari": [4, 8, 9], "number": 4, "theori": [4, 9], "irrat": 4, "root": 4, "induct": 4, "recurs": 4, "infinit": 4, "mani": 4, "prime": 4, "defin": 5, "build": 5, "gaussian": 5, "integ": 5, "hierarchi": 6, "morphism": 6, "sub": 6, "object": 6, "topolog": 7, "filter": 7, "metric": 7, "space": [7, 8], "continu": [7, 8], "ball": 7, "open": 7, "close": 7, "compact": 7, "uniformli": 7, "complet": 7, "fundament": 7, "separ": 7, "countabl": 7, "differenti": 8, "calculu": 8, "norm": 8, "linear": 8, "map": 8, "asymptot": 8, "comparison": 8, "integr": 9, "measur": 9, "index": 10, "mathemat": 11, "lean": 11}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 6, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 56}})
-
-