include "primitives.alh"

Class Float {}
Class String {}

Class Block{}
Class ICBlock{}

Class ConstantBlock{
    name = "Constant"
    value : Float {
        target_lower_cardinality = 1
        target_upper_cardinality = 1
    }
}

Class AdditionBlock{
    name = "Addition"
}
Class NegatorBlock{
    name = "Negator"
}
Class MultiplyBlock{
    name = "Multiply"
}
Class InverseBlock{
    name = "Inverse"
}
Class DelayBlock{
    name = "Delay"
}
Class IntegratorBlock{
    name = "Integrator"
}
Class DerivatorBlock{
    name = "Derivator"
}
Class ProbeBlock{
    name = "Probe"
    name : String {
        target_lower_cardinality = 1
        target_upper_cardinality = 1
    }
}

Association Link(Block, Block){}
Association InitialCondition(Block, ICBlock){
    source_lower_cardinality = 1
    source_upper_cardinality = 1
}

Inheritance (ConstantBlock, Block){}
Inheritance (AdditionBlock, Block){}
Inheritance (NegatorBlock, Block){}
Inheritance (MultiplyBlock, Block){}
Inheritance (InverseBlock, Block){}
Inheritance (ProbeBlock, Block){}
Inheritance (ICBlock, Block){}
Inheritance (DelayBlock, ICBlock){}
Inheritance (IntegratorBlock, ICBlock){}
Inheritance (DerivatorBlock, ICBlock){}
