File: valuatedmatroid_properties.rules

package info (click to toggle)
polymake 4.14-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 35,888 kB
  • sloc: cpp: 168,933; perl: 43,407; javascript: 31,575; ansic: 3,007; java: 2,654; python: 632; sh: 268; xml: 117; makefile: 61
file content (97 lines) | stat: -rw-r--r-- 3,379 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#  Copyright (c) 1997-2024
#  Ewgenij Gawrilow, Michael Joswig, and the polymake team
#  Technische Universität Berlin, Germany
#  https://polymake.org
#
#  This program is free software; you can redistribute it and/or modify it
#  under the terms of the GNU General Public License as published by the
#  Free Software Foundation; either version 2, or (at your option) any
#  later version: http://www.gnu.org/licenses/gpl.txt.
#
#  This program is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#-------------------------------------------------------------------------------

object ValuatedMatroid {

  ### PROPERTIES ###

  # @category Valuation
  # Whether the valuated matroid is transversal
  property TRANSVERSAL_VALUATED_MATROID : Bool;

  # @category Valuation
  # Whether the valuated matroid is transversal
  property POSITIVE_VALUATION : Bool;


  # @category Valuation
  # Defines a valuation on each basis. Entry number i is a valuation on 
  # the i-th element of [[BASES]]. Must fulfill the tropical Plücker relations.
  property VALUATION_ON_BASES : Vector<TropicalNumber<Addition,Scalar>> {
    sub canonical { &canonicalize_tropical_rays; }
  };
  
  # @category Valuation
  # Defines a valuation on each circuit. Row i is a representative of 
  # the i-th element of [[CIRCUITS]]. Must fulfill the tropical circuit
  # valuation axioms. The representative is normalized such that the first
  # non-tropical-zero entry is 0.
  property VALUATION_ON_CIRCUITS : Matrix<TropicalNumber<Addition,Scalar>> {
    sub canonical { &canonicalize_tropical_rays; }
  };

  # @category Combinatorics 
  # This is the matroid subdivision of [[POLYTOPE]] according to the lifting defined by 
  # [[VALUATION_ON_BASES]] (or minus [[VALUATION_ON_BASES]] in the case of max).
  property SUBDIVISION : Array<Set<Int>> {
      sub equal {
         defined(find_permutation(@_))
      }
  }
 
  ### RULES ###
  
  rule VALUATION_ON_BASES : N_ELEMENTS, BASES, CIRCUITS, VALUATION_ON_CIRCUITS {
    valuated_bases_from_circuits($this);
  }
  
  rule VALUATION_ON_CIRCUITS  : N_ELEMENTS, BASES, CIRCUITS, VALUATION_ON_BASES {
    valuated_circuits_from_bases($this);
  }
  
  rule CIRCUITS, N_ELEMENTS : VALUATION_ON_CIRCUITS {
    circuits_supports($this);
  }
  
  rule SUBDIVISION : POLYTOPE, VALUATION_ON_BASES {
      my $v = Addition->orientation * (new Vector<Scalar>($this->VALUATION_ON_BASES));
      $this->SUBDIVISION = polytope::regular_subdivision($this->POLYTOPE->VERTICES, $v);
  }
  
  rule TRANSVERSAL_VALUATED_MATROID, POSITIVE_VALUATION : SUBDIVISION, BASES, N_ELEMENTS {
	my ($flag_pos,$flag_trans) = (1,1);
	foreach my $cell  (@{$this->SUBDIVISION}){
		for my $i (0..$this->SUBDIVISION->size-1){
			my @bases = map {$this->BASES->[$_]} (@{$this->SUBDIVISION->[$i]});
			my $mat = new Matroid(BASES=>\@bases,N_ELEMENTS=>$this->N_ELEMENTS);
			if(!$mat->POSITROID){$flag_pos=0}
			if(!$mat->TRANSVERSAL){$flag_trans=0}
			last if(!$flag_pos && !$flag_trans);
		}
	}
	$this->POSITIVE_VALUATION = $flag_pos;
	$this->TRANSVERSAL_VALUATED_MATROID = $flag_trans;
  }
  precondition : POSITROID;
 
}

# Local Variables:
# mode: perl
# cperl-indent-level: 3
# indent-tabs-mode:nil
# End: