multimethod qblop => ( Quantum::Superpositions::Disj, Quantum::Superpositions::Conj, CODE ) => sub { &debug; return any() unless @{$_[0]} && @{$_[1]}; my @dstates = @{$_[0]}; my @cstates = @{$_[1]}; my @dokay = (0) x @dstates; foreach my $cstate ( @cstates ) # $cstate in (1,2,3) { my $matched; foreach my $d ( 0..$#dstates ) # $d in (0..2) { $matched = ++$dokay[$d] if istrue(qblop($dstates[$d], $cstate, $_[2])); } return any() unless $matched; } return any @dstates[grep { $dokay[$_] == @cstates } (0..$#dstates)]; };