def crossing
stelliferous@0.0.2.0 · proofs/kernel_packing_witness.bend:143
import stelliferous@0.0.2.0/proofs/kernel_packing_witness.bend as KernelPackingWitness
import Base
import stelliferous@0.0.2.0/kernel_spatial_packing.bend as Packing
import stelliferous@0.0.2.0/kernel_packing_samples.bend as PackingSamples
import stelliferous@0.0.2.0/kernel_tile.bend as Tile
import stelliferous@0.0.2.0/proofs/kernel_packing_read_witness.bend as PackingReadWitness
import stelliferous@0.0.2.0/proofs/kernel_tile_witness.bend as TileWitness
143def crossing(+depth: Nat,-input: Array<F32>,-state: Packing.Crossings(),+input_evidence: PackingReadWitness.family(input),evidence: CrossingEvidence<input,depth,state>) ->
144 CrossingEvidence<input,depth,Packing.crossing_step(state)>:
145 CrossingEvidence{output,cursor,equation,balanced} = evidence
146 CrossingCursor{+i,+q,+position,+h,+w,+k,+s,+p,+ow} = cursor
147 %Equal.sym(Packing.Crossings(),state,restore_crossing(input,output,CrossingCursor{i,q,position,h,w,k,s,p,ow}),equation) : CrossingEvidence<input,depth,Packing.crossing_step(_)>
148 +context = PackingSamples.pixel_block(position,q,h,w,k,s,p,ow)
149 -first = PackingSamples.pixel(input,position,q,h,w,k,s,p,ow)
150 store_crossing(depth,input,output,CrossingCursor{i,q,position,h,w,k,s,p,ow},Tile.read_tail(~Array<F32>,~PackingSamples.PixelBlock,~PackingSamples.read_block_pixel,first,context),balanced,
151 TileWitness.tail(~Array<F32>,~PackingSamples.PixelBlock,~PackingReadWitness.family,~PackingSamples.read_block_pixel,~PackingReadWitness.crossing_read,input,context,first,input_evidence,
152 PackingReadWitness.first(input,position,q,h,w,k,s,p,ow,input_evidence)))