File: Mathlib/Algebra/Order/Group/Unbundled/Abs.lean

full_name: abs
code: /-- `mabs a` is the absolute value of `a`. -/
@[to_additive "`abs a` is the absolute value of `a`"] def mabs (a : α) : α 
goal: α

full_name: mabs
code: /-- `mabs a` is the absolute value of `a`. -/
@[to_additive "`abs a` is the absolute value of `a`"] def mabs (a : α) : α 
goal: α

full_name: «term|___|ₘ»
code: macro:max atomic("|" noWs) a:term noWs "|ₘ" : term => `(mabs $a)
goal: Lean.ParserDescr

full_name: «_aux_Mathlib_Algebra_Order_Group_Unbundled_Abs___macroRules_term|___|ₘ_1»
code: macro:max atomic("|" noWs) a:term noWs "|ₘ" : term => `(mabs $a)
goal: Lean.Macro

full_name: «term|___|»
code: macro:max atomic("|" noWs) a:term noWs "|" : term => `(abs $a)
goal: Lean.ParserDescr

full_name: «_aux_Mathlib_Algebra_Order_Group_Unbundled_Abs___macroRules_term|___|_1»
code: macro:max atomic("|" noWs) a:term noWs "|" : term => `(abs $a)
goal: Lean.Macro

full_name: mabs.unexpander
code: /-- Unexpander for the notation `|a|ₘ` for `mabs a`.
Tries to add discretionary parentheses in unparseable cases. -/
@[app_unexpander abs]
def mabs.unexpander : Lean.PrettyPrinter.Unexpander
  
goal: Lean.PrettyPrinter.Unexpander

full_name: abs.unexpander
code: /-- Unexpander for the notation `|a|` for `abs a`.
Tries to add discretionary parentheses in unparseable cases. -/
@[app_unexpander abs]
def abs.unexpander : Lean.PrettyPrinter.Unexpander
  
goal: Lean.PrettyPrinter.Unexpander

full_name: mabs_le'
code: @[to_additive] lemma mabs_le' : |a|ₘ ≤ b ↔ a ≤ b ∧ a⁻¹ ≤ b 
goal: mabs a ≤ b ↔ a ≤ b ∧ a⁻¹ ≤ b

full_name: abs_le'
code: @[to_additive] lemma mabs_le' : |a|ₘ ≤ b ↔ a ≤ b ∧ a⁻¹ ≤ b 
goal: |a| ≤ b ↔ a ≤ b ∧ -a ≤ b

full_name: le_abs_self
code: @[to_additive] lemma le_mabs_self (a : α) : a ≤ |a|ₘ 
goal: a ≤ |a|

full_name: le_mabs_self
code: @[to_additive] lemma le_mabs_self (a : α) : a ≤ |a|ₘ 
goal: a ≤ mabs a

full_name: neg_le_abs
code: @[to_additive] lemma inv_le_mabs (a : α) : a⁻¹ ≤ |a|ₘ 
goal: -a ≤ |a|

full_name: inv_le_mabs
code: @[to_additive] lemma inv_le_mabs (a : α) : a⁻¹ ≤ |a|ₘ 
goal: a⁻¹ ≤ mabs a

full_name: mabs_le_mabs
code: @[to_additive] lemma mabs_le_mabs (h₀ : a ≤ b) (h₁ : a⁻¹ ≤ b) : |a|ₘ ≤ |b|ₘ 
goal: mabs a ≤ mabs b

full_name: abs_le_abs
code: @[to_additive] lemma mabs_le_mabs (h₀ : a ≤ b) (h₁ : a⁻¹ ≤ b) : |a|ₘ ≤ |b|ₘ 
goal: |a| ≤ |b|

full_name: mabs_inv
code: @[to_additive (attr := simp)] lemma mabs_inv (a : α) : |a⁻¹|ₘ = |a|ₘ 
goal: mabs a⁻¹ = mabs a

full_name: abs_neg
code: @[to_additive (attr := simp)] lemma mabs_inv (a : α) : |a⁻¹|ₘ = |a|ₘ 
goal: |(-a)| = |a|

full_name: abs_sub_comm
code: @[to_additive] lemma mabs_div_comm (a b : α) : |a / b|ₘ = |b / a|ₘ 
goal: |a - b| = |b - a|

full_name: mabs_div_comm
code: @[to_additive] lemma mabs_div_comm (a b : α) : |a / b|ₘ = |b / a|ₘ 
goal: mabs (a / b) = mabs (b / a)

full_name: mabs_of_one_le
code: @[to_additive] lemma mabs_of_one_le (h : 1 ≤ a) : |a|ₘ = a 
goal: mabs a = a

full_name: abs_of_nonneg
code: @[to_additive] lemma mabs_of_one_le (h : 1 ≤ a) : |a|ₘ = a 
goal: |a| = a

full_name: abs_of_pos
code: @[to_additive] lemma mabs_of_one_lt (h : 1 < a) : |a|ₘ = a 
goal: |a| = a

full_name: mabs_of_one_lt
code: @[to_additive] lemma mabs_of_one_lt (h : 1 < a) : |a|ₘ = a 
goal: mabs a = a

full_name: mabs_of_le_one
code: @[to_additive] lemma mabs_of_le_one (h : a ≤ 1) : |a|ₘ = a⁻¹ 
goal: mabs a = a⁻¹

full_name: abs_of_nonpos
code: @[to_additive] lemma mabs_of_le_one (h : a ≤ 1) : |a|ₘ = a⁻¹ 
goal: |a| = -a

full_name: mabs_of_lt_one
code: @[to_additive] lemma mabs_of_lt_one (h : a < 1) : |a|ₘ = a⁻¹ 
goal: mabs a = a⁻¹

full_name: abs_of_neg
code: @[to_additive] lemma mabs_of_lt_one (h : a < 1) : |a|ₘ = a⁻¹ 
goal: |a| = -a

full_name: abs_le_abs_of_nonneg
code: @[to_additive] lemma mabs_le_mabs_of_one_le (ha : 1 ≤ a) (hab : a ≤ b) : |a|ₘ ≤ |b|ₘ 
goal: |a| ≤ |b|

full_name: mabs_le_mabs_of_one_le
code: @[to_additive] lemma mabs_le_mabs_of_one_le (ha : 1 ≤ a) (hab : a ≤ b) : |a|ₘ ≤ |b|ₘ 
goal: mabs a ≤ mabs b

full_name: mabs_one
code: @[to_additive (attr := simp)] lemma mabs_one : |(1 : α)|ₘ = 1 
goal: mabs 1 = 1

full_name: abs_zero
code: @[to_additive (attr := simp)] lemma mabs_one : |(1 : α)|ₘ = 1 
goal: |0| = 0

full_name: abs_nonneg
code: @[to_additive (attr := simp) abs_nonneg] lemma one_le_mabs (a : α) : 1 ≤ |a|ₘ 
goal: 0 ≤ |a|

full_name: one_le_mabs
code: @[to_additive (attr := simp) abs_nonneg] lemma one_le_mabs (a : α) : 1 ≤ |a|ₘ 
goal: 1 ≤ mabs a

full_name: abs_abs
code: @[to_additive (attr := simp)] lemma mabs_mabs (a : α) : |(|a|ₘ)|ₘ = |a|ₘ 
goal: |(|a|)| = |a|

full_name: mabs_mabs
code: @[to_additive (attr := simp)] lemma mabs_mabs (a : α) : |(|a|ₘ)|ₘ = |a|ₘ 
goal: mabs (mabs a) = mabs a

full_name: abs_add_le
code: /-- The absolute value satisfies the triangle inequality. -/
@[to_additive "The absolute value satisfies the triangle inequality."]
lemma mabs_mul_le (a b : α) : |a * b|ₘ ≤ |a|ₘ * |b|ₘ 
goal: |a + b| ≤ |a| + |b|

full_name: mabs_mul_le
code: /-- The absolute value satisfies the triangle inequality. -/
@[to_additive "The absolute value satisfies the triangle inequality."]
lemma mabs_mul_le (a b : α) : |a * b|ₘ ≤ |a|ₘ * |b|ₘ 
goal: mabs (a * b) ≤ mabs a * mabs b

full_name: abs_abs_sub_abs_le
code: @[to_additive]
lemma mabs_mabs_div_mabs_le (a b : α) : |(|a|ₘ / |b|ₘ)|ₘ ≤ |a / b|ₘ 
goal: ||a| - |b|| ≤ |a - b|

full_name: mabs_mabs_div_mabs_le
code: @[to_additive]
lemma mabs_mabs_div_mabs_le (a b : α) : |(|a|ₘ / |b|ₘ)|ₘ ≤ |a / b|ₘ 
goal: mabs (mabs a / mabs b) ≤ mabs (a / b)

full_name: sup_sub_inf_eq_abs_sub
code: @[to_additive] lemma sup_div_inf_eq_mabs_div (a b : α) : (a ⊔ b) / (a ⊓ b) = |b / a|ₘ 
goal: a ⊔ b - a ⊓ b = |b - a|

full_name: sup_div_inf_eq_mabs_div
code: @[to_additive] lemma sup_div_inf_eq_mabs_div (a b : α) : (a ⊔ b) / (a ⊓ b) = |b / a|ₘ 
goal: (a ⊔ b) / (a ⊓ b) = mabs (b / a)

full_name: two_nsmul_sup_eq_add_add_abs_sub
code: @[to_additive two_nsmul_sup_eq_add_add_abs_sub]
lemma sup_sq_eq_mul_mul_mabs_div (a b : α) : (a ⊔ b) ^ 2 = a * b * |b / a|ₘ 
goal: 2 • (a ⊔ b) = a + b + |b - a|

full_name: sup_sq_eq_mul_mul_mabs_div
code: @[to_additive two_nsmul_sup_eq_add_add_abs_sub]
lemma sup_sq_eq_mul_mul_mabs_div (a b : α) : (a ⊔ b) ^ 2 = a * b * |b / a|ₘ 
goal: (a ⊔ b) ^ 2 = a * b * mabs (b / a)

full_name: inf_sq_eq_mul_div_mabs_div
code: @[to_additive two_nsmul_inf_eq_add_sub_abs_sub]
lemma inf_sq_eq_mul_div_mabs_div (a b : α) : (a ⊓ b) ^ 2 = a * b / |b / a|ₘ 
goal: (a ⊓ b) ^ 2 = a * b / mabs (b / a)

full_name: two_nsmul_inf_eq_add_sub_abs_sub
code: @[to_additive two_nsmul_inf_eq_add_sub_abs_sub]
lemma inf_sq_eq_mul_div_mabs_div (a b : α) : (a ⊓ b) ^ 2 = a * b / |b / a|ₘ 
goal: 2 • (a ⊓ b) = a + b - |b - a|

full_name: abs_sub_sup_add_abs_sub_inf
code: @[to_additive]
lemma mabs_div_sup_mul_mabs_div_inf (a b c : α) :
    |(a ⊔ c) / (b ⊔ c)|ₘ * |(a ⊓ c) / (b ⊓ c)|ₘ = |a / b|ₘ 
goal: |a ⊔ c - b ⊔ c| + |a ⊓ c - b ⊓ c| = |a - b|

full_name: mabs_div_sup_mul_mabs_div_inf
code: @[to_additive]
lemma mabs_div_sup_mul_mabs_div_inf (a b c : α) :
    |(a ⊔ c) / (b ⊔ c)|ₘ * |(a ⊓ c) / (b ⊓ c)|ₘ = |a / b|ₘ 
goal: mabs ((a ⊔ c) / (b ⊔ c)) * mabs ((a ⊓ c) / (b ⊓ c)) = mabs (a / b)

full_name: abs_sup_sub_sup_le_abs
code: @[to_additive] lemma mabs_sup_div_sup_le_mabs (a b c : α) : |(a ⊔ c) / (b ⊔ c)|ₘ ≤ |a / b|ₘ 
goal: |a ⊔ c - b ⊔ c| ≤ |a - b|

full_name: mabs_sup_div_sup_le_mabs
code: @[to_additive] lemma mabs_sup_div_sup_le_mabs (a b c : α) : |(a ⊔ c) / (b ⊔ c)|ₘ ≤ |a / b|ₘ 
goal: mabs ((a ⊔ c) / (b ⊔ c)) ≤ mabs (a / b)

full_name: abs_inf_sub_inf_le_abs
code: @[to_additive] lemma mabs_inf_div_inf_le_mabs (a b c : α) : |(a ⊓ c) / (b ⊓ c)|ₘ ≤ |a / b|ₘ 
goal: |a ⊓ c - b ⊓ c| ≤ |a - b|

full_name: mabs_inf_div_inf_le_mabs
code: @[to_additive] lemma mabs_inf_div_inf_le_mabs (a b c : α) : |(a ⊓ c) / (b ⊓ c)|ₘ ≤ |a / b|ₘ 
goal: mabs ((a ⊓ c) / (b ⊓ c)) ≤ mabs (a / b)

full_name: m_Birkhoff_inequalities
code: @[to_additive Birkhoff_inequalities]
lemma m_Birkhoff_inequalities (a b c : α) :
    |(a ⊔ c) / (b ⊔ c)|ₘ ⊔ |(a ⊓ c) / (b ⊓ c)|ₘ ≤ |a / b|ₘ 
goal: mabs ((a ⊔ c) / (b ⊔ c)) ⊔ mabs ((a ⊓ c) / (b ⊓ c)) ≤ mabs (a / b)

full_name: Birkhoff_inequalities
code: @[to_additive Birkhoff_inequalities]
lemma m_Birkhoff_inequalities (a b c : α) :
    |(a ⊔ c) / (b ⊔ c)|ₘ ⊔ |(a ⊓ c) / (b ⊓ c)|ₘ ≤ |a / b|ₘ 
goal: |a ⊔ c - b ⊔ c| ⊔ |a ⊓ c - b ⊓ c| ≤ |a - b|

full_name: mabs_choice
code: @[to_additive] lemma mabs_choice (x : α) : |x|ₘ = x ∨ |x|ₘ = x⁻¹ 
goal: mabs x = x ∨ mabs x = x⁻¹

full_name: abs_choice
code: @[to_additive] lemma mabs_choice (x : α) : |x|ₘ = x ∨ |x|ₘ = x⁻¹ 
goal: |x| = x ∨ |x| = -x

full_name: le_abs
code: @[to_additive] lemma le_mabs : a ≤ |b|ₘ ↔ a ≤ b ∨ a ≤ b⁻¹ 
goal: a ≤ |b| ↔ a ≤ b ∨ a ≤ -b

full_name: le_mabs
code: @[to_additive] lemma le_mabs : a ≤ |b|ₘ ↔ a ≤ b ∨ a ≤ b⁻¹ 
goal: a ≤ mabs b ↔ a ≤ b ∨ a ≤ b⁻¹

full_name: mabs_eq_max_inv
code: @[to_additive] lemma mabs_eq_max_inv : |a|ₘ = max a a⁻¹ 
goal: mabs a = max a a⁻¹

full_name: abs_eq_max_neg
code: @[to_additive] lemma mabs_eq_max_inv : |a|ₘ = max a a⁻¹ 
goal: |a| = max a (-a)

full_name: lt_abs
code: @[to_additive] lemma lt_mabs : a < |b|ₘ ↔ a < b ∨ a < b⁻¹ 
goal: a < |b| ↔ a < b ∨ a < -b

full_name: lt_mabs
code: @[to_additive] lemma lt_mabs : a < |b|ₘ ↔ a < b ∨ a < b⁻¹ 
goal: a < mabs b ↔ a < b ∨ a < b⁻¹

full_name: mabs_by_cases
code: @[to_additive] lemma mabs_by_cases (P : α → Prop) (h1 : P a) (h2 : P a⁻¹) : P |a|ₘ 
goal: P (mabs a)

full_name: abs_by_cases
code: @[to_additive] lemma mabs_by_cases (P : α → Prop) (h1 : P a) (h2 : P a⁻¹) : P |a|ₘ 
goal: P |a|

full_name: eq_or_eq_neg_of_abs_eq
code: @[to_additive] lemma eq_or_eq_inv_of_mabs_eq (h : |a|ₘ = b) : a = b ∨ a = b⁻¹ 
goal: a = b ∨ a = -b

full_name: eq_or_eq_inv_of_mabs_eq
code: @[to_additive] lemma eq_or_eq_inv_of_mabs_eq (h : |a|ₘ = b) : a = b ∨ a = b⁻¹ 
goal: a = b ∨ a = b⁻¹

full_name: mabs_eq_mabs
code: @[to_additive] lemma mabs_eq_mabs : |a|ₘ = |b|ₘ ↔ a = b ∨ a = b⁻¹ 
goal: mabs a = mabs b ↔ a = b ∨ a = b⁻¹

full_name: abs_eq_abs
code: @[to_additive] lemma mabs_eq_mabs : |a|ₘ = |b|ₘ ↔ a = b ∨ a = b⁻¹ 
goal: |a| = |b| ↔ a = b ∨ a = -b

full_name: even_abs
code: @[to_additive] lemma isSquare_mabs : IsSquare |a|ₘ ↔ IsSquare a 
goal: Even |a| ↔ Even a

full_name: isSquare_mabs
code: @[to_additive] lemma isSquare_mabs : IsSquare |a|ₘ ↔ IsSquare a 
goal: IsSquare (mabs a) ↔ IsSquare a

full_name: one_lt_mabs
code: @[to_additive (attr := simp) abs_pos] lemma one_lt_mabs : 1 < |a|ₘ ↔ a ≠ 1 
goal: 1 < mabs a ↔ a ≠ 1

full_name: abs_pos
code: @[to_additive (attr := simp) abs_pos] lemma one_lt_mabs : 1 < |a|ₘ ↔ a ≠ 1 
goal: 0 < |a| ↔ a ≠ 0

full_name: one_lt_mabs_pos_of_one_lt
code: @[to_additive abs_pos_of_pos] lemma one_lt_mabs_pos_of_one_lt (h : 1 < a) : 1 < |a|ₘ 
goal: 1 < mabs a

full_name: abs_pos_of_pos
code: @[to_additive abs_pos_of_pos] lemma one_lt_mabs_pos_of_one_lt (h : 1 < a) : 1 < |a|ₘ 
goal: 0 < |a|

full_name: abs_pos_of_neg
code: @[to_additive abs_pos_of_neg] lemma one_lt_mabs_of_lt_one (h : a < 1) : 1 < |a|ₘ 
goal: 0 < |a|

full_name: one_lt_mabs_of_lt_one
code: @[to_additive abs_pos_of_neg] lemma one_lt_mabs_of_lt_one (h : a < 1) : 1 < |a|ₘ 
goal: 1 < mabs a

full_name: neg_abs_le
code: @[to_additive] lemma inv_mabs_le (a : α) : |a|ₘ⁻¹ ≤ a 
goal: -|a| ≤ a

full_name: inv_mabs_le
code: @[to_additive] lemma inv_mabs_le (a : α) : |a|ₘ⁻¹ ≤ a 
goal: (mabs a)⁻¹ ≤ a

full_name: one_le_mul_mabs
code: @[to_additive add_abs_nonneg] lemma one_le_mul_mabs (a : α) : 1 ≤ a * |a|ₘ 
goal: 1 ≤ a * mabs a

full_name: add_abs_nonneg
code: @[to_additive add_abs_nonneg] lemma one_le_mul_mabs (a : α) : 1 ≤ a * |a|ₘ 
goal: 0 ≤ a + |a|

full_name: inv_mabs_le_inv
code: @[to_additive] lemma inv_mabs_le_inv (a : α) : |a|ₘ⁻¹ ≤ a⁻¹ 
goal: (mabs a)⁻¹ ≤ a⁻¹

full_name: neg_abs_le_neg
code: @[to_additive] lemma inv_mabs_le_inv (a : α) : |a|ₘ⁻¹ ≤ a⁻¹ 
goal: -|a| ≤ -a

full_name: abs_ne_zero
code: @[to_additive] lemma mabs_ne_one : |a|ₘ ≠ 1 ↔ a ≠ 1 
goal: |a| ≠ 0 ↔ a ≠ 0

full_name: mabs_ne_one
code: @[to_additive] lemma mabs_ne_one : |a|ₘ ≠ 1 ↔ a ≠ 1 
goal: mabs a ≠ 1 ↔ a ≠ 1

full_name: abs_eq_zero
code: @[to_additive (attr := simp)] lemma mabs_eq_one : |a|ₘ = 1 ↔ a = 1 
goal: |a| = 0 ↔ a = 0

full_name: mabs_eq_one
code: @[to_additive (attr := simp)] lemma mabs_eq_one : |a|ₘ = 1 ↔ a = 1 
goal: mabs a = 1 ↔ a = 1

full_name: abs_nonpos_iff
code: @[to_additive (attr := simp) abs_nonpos_iff] lemma mabs_le_one : |a|ₘ ≤ 1 ↔ a = 1 
goal: |a| ≤ 0 ↔ a = 0

full_name: mabs_le_one
code: @[to_additive (attr := simp) abs_nonpos_iff] lemma mabs_le_one : |a|ₘ ≤ 1 ↔ a = 1 
goal: mabs a ≤ 1 ↔ a = 1

full_name: mabs_le_mabs_of_le_one
code: @[to_additive] lemma mabs_le_mabs_of_le_one (ha : a ≤ 1) (hab : b ≤ a) : |a|ₘ ≤ |b|ₘ 
goal: mabs a ≤ mabs b

full_name: abs_le_abs_of_nonpos
code: @[to_additive] lemma mabs_le_mabs_of_le_one (ha : a ≤ 1) (hab : b ≤ a) : |a|ₘ ≤ |b|ₘ 
goal: |a| ≤ |b|

full_name: abs_lt
code: @[to_additive] lemma mabs_lt : |a|ₘ < b ↔ b⁻¹ < a ∧ a < b 
goal: |a| < b ↔ -b < a ∧ a < b

full_name: mabs_lt
code: @[to_additive] lemma mabs_lt : |a|ₘ < b ↔ b⁻¹ < a ∧ a < b 
goal: mabs a < b ↔ b⁻¹ < a ∧ a < b

full_name: inv_lt_of_mabs_lt
code: @[to_additive] lemma inv_lt_of_mabs_lt (h : |a|ₘ < b) : b⁻¹ < a 
goal: b⁻¹ < a

full_name: neg_lt_of_abs_lt
code: @[to_additive] lemma inv_lt_of_mabs_lt (h : |a|ₘ < b) : b⁻¹ < a 
goal: -b < a

full_name: lt_of_mabs_lt
code: @[to_additive] lemma lt_of_mabs_lt : |a|ₘ < b → a < b 
goal: mabs a < b → a < b

full_name: lt_of_abs_lt
code: @[to_additive] lemma lt_of_mabs_lt : |a|ₘ < b → a < b 
goal: |a| < b → a < b

full_name: max_div_min_eq_mabs'
code: @[to_additive] lemma max_div_min_eq_mabs' (a b : α) : max a b / min a b = |a / b|ₘ 
goal: max a b / min a b = mabs (a / b)

full_name: max_sub_min_eq_abs'
code: @[to_additive] lemma max_div_min_eq_mabs' (a b : α) : max a b / min a b = |a / b|ₘ 
goal: max a b - min a b = |a - b|

full_name: max_sub_min_eq_abs
code: @[to_additive] lemma max_div_min_eq_mabs (a b : α) : max a b / min a b = |b / a|ₘ 
goal: max a b - min a b = |b - a|

full_name: max_div_min_eq_mabs
code: @[to_additive] lemma max_div_min_eq_mabs (a b : α) : max a b / min a b = |b / a|ₘ 
goal: max a b / min a b = mabs (b / a)

full_name: LatticeOrderedAddCommGroup.IsSolid
code: /-- A set `s` in a lattice ordered group is *solid* if for all `x ∈ s` and all `y ∈ α` such that
`|y| ≤ |x|`, then `y ∈ s`. -/
def IsSolid (s : Set α) : Prop 
goal: Prop

full_name: LatticeOrderedAddCommGroup.solidClosure
code: /-- The solid closure of a subset `s` is the smallest superset of `s` that is solid. -/
def solidClosure (s : Set α) : Set α 
goal: Set α

full_name: LatticeOrderedAddCommGroup.isSolid_solidClosure
code: lemma isSolid_solidClosure (s : Set α) : IsSolid (solidClosure s) 
goal: LatticeOrderedAddCommGroup.IsSolid (LatticeOrderedAddCommGroup.solidClosure s)

full_name: LatticeOrderedAddCommGroup.solidClosure_min
code: lemma solidClosure_min (hst : s ⊆ t) (ht : IsSolid t) : solidClosure s ⊆ t 
goal: LatticeOrderedAddCommGroup.solidClosure s ⊆ t

full_name: Pi.abs_apply
code: @[simp] lemma abs_apply (f : ∀ i, α i) (i : ι) : |f| i = |f i| 
goal: |f| i = |f i|

full_name: Pi.abs_def
code: lemma abs_def (f : ∀ i, α i) : |f| = fun i ↦ |f i| 
goal: |f| = fun i => |f i|