Documentation

AddCombi.Convolution.Finite.Defs

Convolution in the compact normalisation #

This file defines several versions of the discrete convolution of functions with the compact normalisation.

Main declarations #

Notation #

Notes #

Some lemmas could technically be generalised to a division ring. Doesn't seem very useful given that the codomain in applications is either , ℝ≥0 or .

Similarly we could drop the commutativity assumption on the domain, but this is unneeded at this point in time.

def conv {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] (f g : GK) :
GK

Compact convolution on a finite group.

The value of f ∗ g at a is the average of the value of f b * g c over b + c = a.

Equations
Instances For

    Compact convolution on a finite group.

    The value of f ∗ g at a is the average of the value of f b * g c over b + c = a.

    Equations
    Instances For
      theorem conv_apply {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] (f g : GK) (a : G) :
      (f g) a = {x : G × G | x.1 + x.2 = a}.expect fun (x : G × G) => f x.1 * g x.2
      theorem conv_eq_smul_sum {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] (f g : GK) (a : G) :
      (f g) a = (↑(Fintype.card G))⁻¹ x : G × G with x.1 + x.2 = a, f x.1 * g x.2
      @[simp]
      theorem conv_zero {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] (f : GK) :
      f 0 = 0
      @[simp]
      theorem zero_conv {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] (f : GK) :
      0 f = 0
      theorem conv_add {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] (f g h : GK) :
      f (g + h) = f g + f h
      theorem add_conv {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] (f g h : GK) :
      (f + g) h = f h + g h
      theorem smul_conv {G : Type u_1} {H : Type u_2} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] [DistribSMul H K] [IsScalarTower H K K] [SMulCommClass H K K] (c : H) (f g : GK) :
      c f g = c (f g)
      theorem conv_smul {G : Type u_1} {H : Type u_2} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] [DistribSMul H K] [SMulCommClass H K K] (c : H) (f g : GK) :
      f c g = c (f g)
      theorem smul_conv_assoc {G : Type u_1} {H : Type u_2} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] [DistribSMul H K] [IsScalarTower H K K] [SMulCommClass H K K] (c : H) (f g : GK) :
      c f g = c (f g)

      Alias of smul_conv.

      theorem smul_conv_left_comm {G : Type u_1} {H : Type u_2} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] [DistribSMul H K] [SMulCommClass H K K] (c : H) (f g : GK) :
      f c g = c (f g)

      Alias of conv_smul.

      @[simp]
      theorem translate_conv {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] (a : G) (f g : GK) :
      translate a f g = translate a (f g)
      @[simp]
      theorem conv_translate {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] (a : G) (f g : GK) :
      f translate a g = translate a (f g)
      theorem conv_comm {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] (f g : GK) :
      f g = g f
      theorem mul_smul_conv_comm {G : Type u_1} {H : Type u_2} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] [Monoid H] [DistribMulAction H K] [IsScalarTower H K K] [SMulCommClass H K K] (c d : H) (f g : GK) :
      (c * d) (f g) = c f d g
      theorem conv_assoc {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] (f g h : GK) :
      f g h = f (g h)
      theorem conv_right_comm {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] (f g h : GK) :
      f g h = f h g
      theorem conv_left_comm {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] (f g h : GK) :
      f (g h) = g (f h)
      theorem conv_conv_conv_comm {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] (f g h i : GK) :
      f g (h i) = f h (g i)
      theorem map_conv {G : Type u_1} {K : Type u_3} {L : Type u_4} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] [Semifield L] [CharZero L] (m : K →+* L) (f g : GK) (a : G) :
      m ((f g) a) = (m f m g) a
      theorem comp_conv {G : Type u_1} {K : Type u_3} {L : Type u_4} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] [Semifield L] [CharZero L] (m : K →+* L) (f g : GK) :
      m (f g) = m f m g
      theorem conv_eq_expect_sub {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] (f g : GK) (a : G) :
      (f g) a = Finset.univ.expect fun (t : G) => f (a - t) * g t
      theorem conv_eq_expect_add {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] (f g : GK) (a : G) :
      (f g) a = Finset.univ.expect fun (t : G) => f (a + t) * g (-t)
      theorem conv_eq_expect_sub' {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] (f g : GK) (a : G) :
      (f g) a = Finset.univ.expect fun (t : G) => f t * g (a - t)
      theorem conv_eq_expect_add' {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] (f g : GK) (a : G) :
      (f g) a = Finset.univ.expect fun (t : G) => f (-t) * g (a + t)
      theorem conv_apply_add {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] (f g : GK) (a b : G) :
      (f g) (a + b) = Finset.univ.expect fun (t : G) => f (a + t) * g (b - t)
      theorem expect_conv_mul {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] (f g h : GK) :
      (Finset.univ.expect fun (a : G) => (f g) a * h a) = Finset.univ.expect fun (a : G) => Finset.univ.expect fun (b : G) => f a * g b * h (a + b)
      theorem expect_conv {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] (f g : GK) :
      (Finset.univ.expect fun (a : G) => (f g) a) = (Finset.univ.expect fun (a : G) => f a) * Finset.univ.expect fun (a : G) => g a
      @[simp]
      theorem conv_const {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] (f : GK) (b : K) :
      f Function.const G b = Function.const G ((Finset.univ.expect fun (x : G) => f x) * b)
      @[simp]
      theorem const_conv {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] (b : K) (f : GK) :
      Function.const G b f = Function.const G (b * Finset.univ.expect fun (x : G) => f x)
      theorem indicator_one_conv {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] (s : Finset G) (f : GK) :
      ((↑s).indicator fun (x : G) => 1) f = (↑(Fintype.card G))⁻¹ as, translate a f
      theorem conv_indicator_one {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] (f : GK) (s : Finset G) :
      (f (↑s).indicator fun (x : G) => 1) = (↑(Fintype.card G))⁻¹ as, translate a f
      theorem indicator_one_conv_indicator_one_eq_dens {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] (s t : Finset G) (a : G) :
      (((↑s).indicator fun (x : G) => 1) (↑t).indicator fun (x : G) => 1) a = (s (a +ᵥ -t)).dens
      def dconv {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] [StarRing K] (f g : GK) :
      GK

      Compact difference convolution on a finite group.

      The value of f ∗ g at a is the average of the value of f b * g c over b - c = a.

      Equations
      Instances For

        Compact difference convolution on a finite group.

        The value of f ∗ g at a is the average of the value of f b * g c over b - c = a.

        Equations
        Instances For
          theorem dconv_apply {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] [StarRing K] (f g : GK) (a : G) :
          (f g) a = {x : G × G | x.1 - x.2 = a}.expect fun (x : G × G) => f x.1 * (starRingEnd (GK)) g x.2
          theorem dconv_eq_smul_sum {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] [StarRing K] (f g : GK) (a : G) :
          (f g) a = (↑(Fintype.card G))⁻¹ x : G × G with x.1 - x.2 = a, f x.1 * (starRingEnd (GK)) g x.2
          @[simp]
          theorem conv_conjneg {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] [StarRing K] (f g : GK) :
          f conjneg g = f g
          @[simp]
          theorem dconv_conjneg {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] [StarRing K] (f g : GK) :
          f conjneg g = f g
          @[simp]
          theorem translate_dconv {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] [StarRing K] (a : G) (f g : GK) :
          translate a f g = translate a (f g)
          @[simp]
          theorem dconv_translate {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] [StarRing K] (a : G) (f g : GK) :
          f translate a g = translate (-a) (f g)
          @[simp]
          theorem conj_conv {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] [StarRing K] (f g : GK) :
          (starRingEnd (GK)) (f g) = (starRingEnd (GK)) f (starRingEnd (GK)) g
          @[simp]
          theorem conj_dconv {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] [StarRing K] (f g : GK) :
          (starRingEnd (GK)) (f g) = (starRingEnd (GK)) f (starRingEnd (GK)) g
          theorem IsSelfAdjoint.conv {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] {f g : GK} [StarRing K] (hf : IsSelfAdjoint f) (hg : IsSelfAdjoint g) :
          theorem IsSelfAdjoint.dconv {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] {f g : GK} [StarRing K] (hf : IsSelfAdjoint f) (hg : IsSelfAdjoint g) :
          @[simp]
          theorem conjneg_conv {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] [StarRing K] (f g : GK) :
          @[simp]
          theorem conjneg_dconv {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] [StarRing K] (f g : GK) :
          conjneg (f g) = g f
          @[simp]
          theorem dconv_zero {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] [StarRing K] (f : GK) :
          f 0 = 0
          @[simp]
          theorem zero_dconv {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] [StarRing K] (f : GK) :
          0 f = 0
          theorem dconv_add {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] [StarRing K] (f g h : GK) :
          f (g + h) = f g + f h
          theorem add_dconv {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] [StarRing K] (f g h : GK) :
          (f + g) h = f h + g h
          theorem smul_dconv {G : Type u_1} {H : Type u_2} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] [StarRing K] [DistribSMul H K] [IsScalarTower H K K] [SMulCommClass H K K] (c : H) (f g : GK) :
          c f g = c (f g)
          theorem dconv_smul {G : Type u_1} {H : Type u_2} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] [StarRing K] [Star H] [DistribSMul H K] [SMulCommClass H K K] [StarModule H K] (c : H) (f g : GK) :
          f c g = star c (f g)
          theorem smul_dconv_assoc {G : Type u_1} {H : Type u_2} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] [StarRing K] [DistribSMul H K] [IsScalarTower H K K] [SMulCommClass H K K] (c : H) (f g : GK) :
          c f g = c (f g)

          Alias of smul_dconv.

          theorem smul_dconv_left_comm {G : Type u_1} {H : Type u_2} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] [StarRing K] [Star H] [DistribSMul H K] [SMulCommClass H K K] [StarModule H K] (c : H) (f g : GK) :
          f c g = star c (f g)

          Alias of dconv_smul.

          theorem conv_dconv_conv_comm {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] [StarRing K] (f g h i : GK) :
          f g (h i) = f h (g i)
          theorem dconv_conv_dconv_comm {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] [StarRing K] (f g h i : GK) :
          f g (h i) = f h (g i)
          theorem dconv_dconv_dconv_comm {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] [StarRing K] (f g h i : GK) :
          f g (h i) = f h (g i)
          theorem dconv_eq_expect_add {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] [StarRing K] (f g : GK) (a : G) :
          (f g) a = Finset.univ.expect fun (t : G) => f (a + t) * (starRingEnd K) (g t)
          theorem dconv_eq_expect_sub {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] [StarRing K] (f g : GK) (a : G) :
          (f g) a = Finset.univ.expect fun (t : G) => f t * (starRingEnd K) (g (t - a))
          theorem dconv_apply_neg {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] [StarRing K] (f g : GK) (a : G) :
          (f g) (-a) = (starRingEnd K) ((g f) a)
          theorem dconv_apply_sub {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] [StarRing K] (f g : GK) (a b : G) :
          (f g) (a - b) = Finset.univ.expect fun (t : G) => f (a + t) * (starRingEnd K) (g (b + t))
          theorem expect_dconv_mul {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] [StarRing K] (f g h : GK) :
          (Finset.univ.expect fun (a : G) => (f g) a * h a) = Finset.univ.expect fun (a : G) => Finset.univ.expect fun (b : G) => f a * (starRingEnd K) (g b) * h (a - b)
          theorem expect_dconv {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] [StarRing K] (f g : GK) :
          (Finset.univ.expect fun (a : G) => (f g) a) = (Finset.univ.expect fun (a : G) => f a) * Finset.univ.expect fun (a : G) => (starRingEnd K) (g a)
          @[simp]
          theorem dconv_const {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] [StarRing K] (f : GK) (b : K) :
          f Function.const G b = Function.const G ((Finset.univ.expect fun (x : G) => f x) * (starRingEnd K) b)
          @[simp]
          theorem const_dconv {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] [StarRing K] (b : K) (f : GK) :
          Function.const G b f = Function.const G (b * Finset.univ.expect fun (x : G) => (starRingEnd K) (f x))
          theorem indicator_one_dconv {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] [StarRing K] (s : Finset G) (f : GK) :
          ((↑s).indicator fun (x : G) => 1) f = (↑(Fintype.card G))⁻¹ as, translate a (conjneg f)
          theorem dconv_indicator_one {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] [StarRing K] (f : GK) (s : Finset G) :
          (f (↑s).indicator fun (x : G) => 1) = (↑(Fintype.card G))⁻¹ as, translate (-a) f
          theorem indicator_one_dconv_indicator_one_eq_dens {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] [StarRing K] (s t : Finset G) (a : G) :
          (((↑s).indicator fun (x : G) => 1) (↑t).indicator fun (x : G) => 1) a = (s (a +ᵥ t)).dens
          theorem expect_indicator_one_dconv_indicator_one {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] [StarRing K] (s t : Finset G) :
          (Finset.univ.expect fun (a : G) => (((↑s).indicator fun (x : G) => 1) (↑t).indicator fun (x : G) => 1) a) = s.dens * t.dens
          theorem expect_indicator_one_dconv_indicator_sq {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Semifield K] [CharZero K] [StarRing K] (s t : Finset G) :
          (Finset.univ.expect fun (x : G) => (((↑s).indicator fun (x : G) => 1) (↑t).indicator fun (x : G) => 1) x ^ 2) = (s.addEnergy' t)
          @[simp]
          theorem conv_neg {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Field K] [CharZero K] (f g : GK) :
          f -g = -(f g)
          @[simp]
          theorem neg_conv {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Field K] [CharZero K] (f g : GK) :
          -f g = -(f g)
          theorem conv_sub {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Field K] [CharZero K] (f g h : GK) :
          f (g - h) = f g - f h
          theorem sub_conv {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Field K] [CharZero K] (f g h : GK) :
          (f - g) h = f h - g h
          @[simp]
          theorem balance_conv {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Field K] [CharZero K] (f g : GK) :
          @[simp]
          theorem dconv_neg {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Field K] [CharZero K] [StarRing K] (f g : GK) :
          f -g = -(f g)
          @[simp]
          theorem neg_dconv {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Field K] [CharZero K] [StarRing K] (f g : GK) :
          -f g = -(f g)
          theorem dconv_sub {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Field K] [CharZero K] [StarRing K] (f g h : GK) :
          f (g - h) = f g - f h
          theorem sub_dconv {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Field K] [CharZero K] [StarRing K] (f g h : GK) :
          (f - g) h = f h - g h
          @[simp]
          theorem balance_dconv {G : Type u_1} {K : Type u_3} [Fintype G] [DecidableEq G] [AddCommGroup G] [Field K] [CharZero K] [StarRing K] (f g : GK) :
          @[simp]
          theorem RCLike.coe_conv {G : Type u_1} [Fintype G] [DecidableEq G] [AddCommGroup G] {𝕜 : Type} [RCLike 𝕜] (f g : G) (a : G) :
          ((f g) a) = (ofReal f ofReal g) a
          @[simp]
          theorem RCLike.coe_dconv {G : Type u_1} [Fintype G] [DecidableEq G] [AddCommGroup G] {𝕜 : Type} [RCLike 𝕜] (f g : G) (a : G) :
          ((f g) a) = (ofReal f ofReal g) a
          @[simp]
          theorem RCLike.coe_comp_conv {G : Type u_1} [Fintype G] [DecidableEq G] [AddCommGroup G] {𝕜 : Type} [RCLike 𝕜] (f g : G) :
          @[simp]
          theorem RCLike.coe_comp_dconv {G : Type u_1} [Fintype G] [DecidableEq G] [AddCommGroup G] {𝕜 : Type} [RCLike 𝕜] (f g : G) :
          @[simp]
          theorem Complex.coe_conv {G : Type u_1} [Fintype G] [DecidableEq G] [AddCommGroup G] (f g : G) (a : G) :
          ((f g) a) = (ofReal f ofReal g) a
          @[simp]
          theorem Complex.coe_dconv {G : Type u_1} [Fintype G] [DecidableEq G] [AddCommGroup G] (f g : G) (a : G) :
          ((f g) a) = (ofReal f ofReal g) a
          @[simp]
          theorem Complex.ofReal_comp_conv {G : Type u_1} [Fintype G] [DecidableEq G] [AddCommGroup G] (f g : G) :
          @[simp]
          theorem Complex.ofReal_comp_dconv {G : Type u_1} [Fintype G] [DecidableEq G] [AddCommGroup G] (f g : G) :
          @[simp]
          theorem NNReal.coe_conv {G : Type u_1} [Fintype G] [DecidableEq G] [AddCommGroup G] (f g : GNNReal) (a : G) :
          ((f g) a) = (toReal f toReal g) a
          @[simp]
          theorem NNReal.coe_dconv {G : Type u_1} [Fintype G] [DecidableEq G] [AddCommGroup G] (f g : GNNReal) (a : G) :
          ((f g) a) = (toReal f toReal g) a
          @[simp]
          theorem NNReal.coe_comp_conv {G : Type u_1} [Fintype G] [DecidableEq G] [AddCommGroup G] (f g : GNNReal) :
          @[simp]
          theorem NNReal.coe_comp_dconv {G : Type u_1} [Fintype G] [DecidableEq G] [AddCommGroup G] (f g : GNNReal) :