circuits-diff
Safe HaskellNone
LanguageGHC2024

Circuit.Diff.Taylor

Description

Scalar Taylor tower as a circuits arrow.

A value Taylor n a b is a morphism from a to b whose values are truncated Taylor series of order n. The internal representation is structural: scalar wires carry n+1 coefficients, unit wires carry (), and product wires pair the two shapes. This makes the cartesian instances straightforward by recursion on the value shape.

The carrier is intentionally scalar-first: objects are built from Double and (,), and the bimonoid instances are supplied for Double (and the unit). The Traced instance ties a lazy knot on the value shape, just as the pure (->) trace does; for stable feedback the coefficients resolve order-by-order.

Scalar primitives (addT, mulT, etc.) are implemented via Jet, so they inherit the correct truncated-series recurrences for addition, multiplication, and elementary functions.

Synopsis

Taylor arrow

newtype Taylor (n :: Nat) a b Source #

Truncated Taylor series arrow of order n.

Constructors

Taylor 

Fields

Instances

Instances details
Channel (,) (Taylor n :: Type -> Type -> Type) Source # 
Instance details

Defined in Circuit.Diff.Taylor

Methods

assoc :: Taylor n ((a, b), c) (a, (b, c)) #

assoc' :: Taylor n (a, (b, c)) ((a, b), c) #

slide :: Taylor n (a, (b, c)) (b, (a, c)) #

Strength (,) (Taylor n :: Type -> Type -> Type) Source # 
Instance details

Defined in Circuit.Diff.Taylor

Methods

strength :: Taylor n b c -> Taylor n (a, b) (a, c) #

Traced (,) (Taylor n :: Type -> Type -> Type) Source # 
Instance details

Defined in Circuit.Diff.Taylor

Methods

trace :: Taylor n (a, b) (a, c) -> Taylor n b c #

Action (,) (Taylor n :: Type -> Type -> Type) Source # 
Instance details

Defined in Circuit.Diff.Taylor

Methods

braid :: Taylor n (a, b) (b, a) #

Tensor (,) (Taylor n :: Type -> Type -> Type) Source # 
Instance details

Defined in Circuit.Diff.Taylor

Methods

tensor :: Taylor n a b -> Taylor n c d -> Taylor n (a, c) (b, d) #

Unital (,) (Taylor n :: Type -> Type -> Type) Source # 
Instance details

Defined in Circuit.Diff.Taylor

Methods

unitl :: Taylor n (Unit (,), a) a #

unitl' :: Taylor n a (Unit (,), a) #

unitr :: Taylor n (a, Unit (,)) a #

unitr' :: Taylor n a (a, Unit (,)) #

Category (Taylor n :: Type -> Type -> Type) Source # 
Instance details

Defined in Circuit.Diff.Taylor

Methods

id :: Taylor n a a #

(.) :: Taylor n b c -> Taylor n a b -> Taylor n a c #

Discard (Taylor n :: Type -> Type -> Type) () Source # 
Instance details

Defined in Circuit.Diff.Taylor

Methods

discard :: Taylor n () () #

Discard (Taylor n :: Type -> Type -> Type) Double Source # 
Instance details

Defined in Circuit.Diff.Taylor

Methods

discard :: Taylor n Double () #

Zero (Taylor n :: Type -> Type -> Type) () Source # 
Instance details

Defined in Circuit.Diff.Taylor

Methods

zero :: Taylor n () () #

KnownNat n => Zero (Taylor n :: Type -> Type -> Type) Double Source # 
Instance details

Defined in Circuit.Diff.Taylor

Methods

zero :: Taylor n () Double #

Copy (Taylor n) () Source # 
Instance details

Defined in Circuit.Diff.Taylor

Methods

copy :: Taylor n () ((), ()) #

Copy (Taylor n) Double Source # 
Instance details

Defined in Circuit.Diff.Taylor

Methods

copy :: Taylor n Double (Double, Double) #

Merge (Taylor n) () Source # 
Instance details

Defined in Circuit.Diff.Taylor

Methods

plus :: Taylor n ((), ()) () #

Merge (Taylor n) Double Source # 
Instance details

Defined in Circuit.Diff.Taylor

Methods

plus :: Taylor n (Double, Double) Double #

data TaylorV (n :: Nat) a where Source #

Values carried on a Taylor wire.

Constructors

VT :: forall (n :: Nat). TaylorV n () 
VD :: forall (n :: Nat). [Double] -> TaylorV n Double 
VP :: forall (n :: Nat) a1 b. TaylorV n a1 -> TaylorV n b -> TaylorV n (a1, b) 

Scalar primitives

constT :: forall (n :: Nat). Double -> Taylor n Double Double Source #

Constant scalar morphism.

addT :: forall (n :: Nat). Taylor n (Double, Double) Double Source #

Add two scalar series.

mulT :: forall (n :: Nat). Taylor n (Double, Double) Double Source #

Multiply two scalar series.

sinT :: forall (n :: Nat). Taylor n Double Double Source #

Sine of a scalar series.

cosT :: forall (n :: Nat). Taylor n Double Double Source #

Cosine of a scalar series.

expT :: forall (n :: Nat). Taylor n Double Double Source #

Exponential of a scalar series.

logT :: forall (n :: Nat). Taylor n Double Double Source #

Logarithm of a scalar series.

Polynomial construction and evaluation

polyT :: forall (n :: Nat). [Double] -> Taylor n Double Double Source #

Build a polynomial morphism from coefficients [c0, c1, ..., ck], mapping the input series u to c0 + c1*u + c2*u^2 + ... + ck*u^k.

shiftT :: forall (n :: Nat). Double -> Taylor n Double Double Source #

Shift the input series by a constant x0.

evalTaylor :: forall (n :: Nat). KnownNat n => Taylor n Double Double -> Double -> [Double] Source #

Evaluate a scalar Taylor morphism at a point and return the Taylor coefficients [f(x), f'(x), f''(x)/2!, ...].

evalTaylorDerivs :: forall (n :: Nat). KnownNat n => Taylor n Double Double -> Double -> [Double] Source #

Evaluate a scalar Taylor morphism and return the raw derivatives [f(x), f'(x), f''(x), ..., f^(n)(x)].

Bridge from Diff

taylorCoeffsFromDiff :: forall {k} (p :: k). Diff p Double Double -> Double -> Int -> [Double] Source #

Approximate Taylor coefficients of a Diff scalar function at a point using forward differences.

The returned list [c0, c1, ..., ck] represents f(x0 + eps) = c0 + c1*eps + c2*eps^2 + ... + ck*eps^k.

approxTaylorFromDiff :: forall {k} (n :: Nat) (p :: k). KnownNat n => Diff p Double Double -> Double -> Taylor n Double Double Source #

Build a Taylor morphism that approximates a Diff scalar function near x0.