All pastes #744250 Raw Edit

Anonymous

public text v1 · immutable
·published 2007-10-21 07:25 UTC
rendered paste body
#  reflexive and transitive, but neither symmetric nor antisymmetric.

my @s = 1..3;
my @p = map { $l=$_; map { "($l,$_)" } @s } @s;
my $k = @p;


for (my $i=0;$i<2**$k;$i++) {
    my %R;
    for (my $j=0;$j<$k;$j++) {
	$R{$p[$j]} = 1 if ($i & (1<<$j));
    }
    
    next unless reflexive(\%R);
    next unless transitive(\%R);
    next if symmetric(\%R);
    next if antisymmetric(\%R);
    print "{",join(",",sort keys %R),"}\n";
}

sub reflexive($) {
    my $r = shift;
    foreach my $a (@s) {
	return 0 unless $r->{"($a,$a)"};
    }
    return 1;
}

sub transitive($) {
    my $r = shift;
    foreach my $a (@s) {
	foreach my $b (@s) {
	    next unless $r->{"($a,$b)"};
	    foreach my $c (@s) {
		next unless $r->{"($b,$c)"};
		return 0 unless $r->{"($a,$c)"};
	    }
	}
    }
    return 1;
}

sub symmetric($) {
    my $r = shift;
    foreach my $a (@s) {
	foreach my $b (@s) {
	    next unless $r->{"($a,$b)"};
	    return 0 unless $r->{"($b,$a)"};
	}
    }
    return 1;
}

sub antisymmetric($) {
    my $r = shift;
    foreach my $a (@s) {
	foreach my $b (@s) {
	    next unless $r->{"($a,$b)"};
	    next unless $r->{"($b,$a)"};
	    return 0 unless $a==$b;
	}
    }
    return 1;
}