rusty-bidding-bot reference: engine 0.11.2, API 1, rules 025ff0a765f62ceb ========================================================================= A rule-based bridge bidding engine (Rust, compiled to WebAssembly) bidding all four hands of a deal in the browser, seat by seat, with the convention cards you choose. Generated from the page's own vocabulary and the engine it ships, so it describes exactly the tool served beside it. Page: https://bridge-craftwork.com/rusty-bidding-bot/ Status: https://bridge-craftwork.com/rusty-bidding-bot/status.html (data: status/status.json) Source: https://github.com/bridge-craftwork/rusty-bidding-bot Engine: 107 convention modules, 4167 rules PAGE ---- Pick a deal (a Practice-Bidding-Scenarios scenario, a random deal, a dealer3 script or a deal of your own), the two partnerships' convention cards, and let the engine bid: one call at a time or to the end. Undo takes back the last call; the bidding box makes a call of your own, and the engine carries on from it. Alerted and announced calls are marked; the meanings of all calls can be shown. The x-ray shows, under the auction, every rule the engine weighed for a call (its priority, descriptiveness and why it lost), what each seat had shown and each side's forcing state before it, and how the engine reads BBA's auction. When the auction ends every hand is shown with the double-dummy table, par and the contract's result. For a scenario, BBA's auction of the same deal is shown beside ours. Settings a card switches on that no rule reads (conventions and treatments the engine does not play) are flagged. DEEP LINKS ---------- The page's state is in the URL fragment (never the query string), as key=value pairs joined by &, values URI-encoded: every INPUT field and every PARAMS field below whose value is text, a number or true/false. Examples: #scenario=Stayman&board=12 #random=true&seed=42&board=3&view=S #deal=N%3AAK52.KJ7.Q94.K83%20QJ3.Q95.KJ3.QJ74%20T64.AT832.A2.T62%20987.64.T8765.A95&dealer=N&vul=None&auction=1NT%20Pass&ns=21GF-DEFAULT&ew=Precision #scenario=Jacoby_2N&board=4&rotate=2&stop=3 #scenarioScript=Stayman&seed=7 #scenario=Stayman&board=12&xray=1 stop=N shows the position after N calls (the engine is deterministic, so the link reproduces them). xray=1 opens the x-ray under the auction (the rules the engine weighed for a call, what each seat had shown, the forcing state); xray=all shows it for every call. set is written path=value;path=value. An uploaded card cannot travel in a link. JAVASCRIPT API -------------- window.rustyBiddingBot = { run, validate, getInput, setInput, getOutput } run(input, params) Promise of the output. Loads input (null keeps the current deal), applies params, bids to params.stop and solves the deal when it ends. The page shows the result. validate(input, params) Promise of {ok, diagnostics}: checks without bidding (the deal, dealer, auction legality, cards, params; a dealer3 script's syntax). getInput() The input that reproduces the page's position. setInput(input) Promise: load input into the page (the calls in input.auction; the engine does not bid). getOutput() The page's state as data (below). input: an object with the fields below, or a string (a PBN deal "N: ", or PBN text of one board). scenario PBS scenario name, e.g. "Stayman" Deal a board from the Practice-Bidding-Scenarios corpus for this scenario (500 boards each, with BBA's own auction for comparison). Its convention cards become the default cards. board integer 1-500 Which corpus board (scenario), or the board number for dealer and vulnerability (random, script). Default 1. scenarioScriptPBS scenario name Deal fresh boards with that scenario's own dealer script (dealer3), from `seed`, instead of its corpus; its cards as for scenario. script dealer3 script text Deal with dealer3 (the dealer.exe language): the first deal the script produces from `seed`. `# convention-card-ns:` / `-ew:` lines in the script choose the cards. random true A random deal from `seed`. seed integer Seed for random and script deals, so a link reproduces the deal. Default 1. pbn PBN text of one board Its [Deal], [Dealer], [Vulnerable] and [Board] are read; its [Auction] is not. deal PBN deal "N: " (hands S.H.D.C) or {"N": hand, ...} The deal itself. dealer N | E | S | W Overrides the source's dealer. vul None | NS | EW | All Overrides the source's vulnerability. auction calls from the dealer, e.g. "1NT Pass 2C" (P, X, XX; 1N or 1NT) Calls already made: kept as they are (forced); the engine bids from there. params: ns card default: the scenario's card, else 21GF-DEFAULT North-South's convention card: a built-in card name (see "Cards"), "scenario", {"bbsa": "<.bbsa file text>"} or {"json": }. ew card default: the scenario's card, else 21GF-GIB East-West's card, the same forms. set ["path=value", ...] default: [] Card changes for both sides, e.g. "general.style=bba" or "notrump.stayman.play=false" (field paths: the conventions reference, `card:` lines). scoring MP | IMP default: the board's, else MP Matchpoints or IMPs; some rules judge by it. rotate 0 | 1 | 2 | 3 default: 0 Turn the deal this many seats clockwise (dealer and vulnerability turn with it). With odd turns the scenario's cards change sides too, so each hand keeps its system. stop "end" or an integer default: "end" How many calls to have on the table when run() returns: "end" bids the auction out. dd true | false default: true Solve the double-dummy table, par and the contract's result when the auction ends. view all | N | E | S | W default: all The page: show all four hands, or only this seat's until the auction ends. meanings true | false default: false The page: show what every call means, not only alerts. xray 0 | 1 | all default: 0 X-ray: every rule the engine weighed for each call (priority, descriptiveness, why each lost), what every seat had shown and each side's forcing state before the call, and how the engine read the call; for a scenario, how it read BBA's auction. 1: the page shows the selected call's x-ray under the auction (the last call when none is selected); all: every call's. With 1 or all the output carries `xray` (true and false are read as 1 and 0). output: ok false when a diagnostic is an error source "scenario" | "random" | "script" | "deal" scenario, board deal PBN deal, after rotation; hands {N, E, S, W} dealer, vul, scoring, rotate cards {ns, ew}: the names of the cards in play calls [{seat, call, by, why, meaning, alert, rule, noRule, shows}] by: "engine" | "you" | "forced" (from input.auction); why: the engine's reason for its call; meaning: what the call shows to the table; alert: null or {kind: "alert" | "announce", text}; noRule: no rule explains the call (a gap in the engine's system); shows: the caller's hand as known after the call complete, next, contract, declarer dd null, or {tricks: {N: {C, D, H, S, NT}, E, S, W}, par: {score_ns, contracts}, result: {contract, declarer, tricks, score_ns}} bba for a scenario, BBA's auction of the deal: {auction: [{seat, call, note}]} coverage {ns, ew}: of the settings each card switches on, read (the rules use them), ignored (no rule reads them: not played), unmapped (settings with no card field: .bbsa keys, card JSON paths), other (carding, leads), score = read / (read + ignored) xray null unless params.xray is 1 or "all"; then {calls: [{index, seat, call, by, hand, engineCall, engineWhy, offered, candidates, warnings, before, reading}], now, bba}. For each call: candidates are every rule the engine weighed for the caller's hand there, best-ranked first: {call, explanation, priority, descriptiveness, prefer, outcome, rule: {module, file, line}}, outcome "chosen", "outranked", "partner's call is forcing" or why the hand fails ("hand fails `shows hcp>=17`"); engineCall is what the engine bids with that hand there (for a call it did not make, too) and offered whether any rule offers the call actually made; before is the table before the call: {knowledge: {N, E, S, W: {hcp: {min, max}, lengths: {S, H, D, C}, balanced, summary, shown}}, sides: {ns, ew: {trump, forcing: "none" | "round" | "game", forcing_by, ask, answered, summary}}}; reading is how the table reads the call: {explanation, alert, rule, artificial, knowledge (the caller's, after it)}. now is the table after the last call, in the shape of before. bba (a scenario) is BBA's auction as the engine reads it: [{seat, call, note, reading, engineCall}]. diagnostics [{severity, message, line?, col?, hint?}] DIAGNOSTICS ----------- {severity: "error" | "warning" | "info", message, line?, col?, hint?}. message starts with the field it concerns (deal.N:, auction:, cards.ns:, params.scoring:, script:). line and col are 1-based: the column of a call in an auction string, the line of a key in a .bbsa card, the line and column in a dealer script. The page lists them under the table. CARDS ----- Built in (the Practice-Bidding-Scenarios .bbsa cards): 21GF-DEFAULT, 21GF-Flannery, 21GF-GIB-Bergen, 21GF-GIB, 21GF-Gazzilli, 21GF-MSS, 21GF-MSTandMSS, 21GF-Multi, 21GF-NoInvertedMinor, 21GF-Ogust, 21GF-PolishTwoSuiters, 21GF-Puppet, 21GF-SPECIALS, 21GF-SPECIALS2, 21GF-WJS-MSS, Basic-Bridge, Brill, Natural-4CM, Natural, Precision-14-16, Precision, SAYC Also: a BBA .bbsa file ({"bbsa": text}), or a Bridge-Classroom convention card ({"json": card_data}, or the editor's export {"json": {schema, name, card_data}}: keys such as _bbo_raw are ignored); BC-21-Intermediate is Bridge-Classroom's 2/1 Intermediate card, built in. The page converts any card to either format (its JSON download is Bridge-Classroom's export). CONVENTIONS ----------- The engine's rules, module by module: the card fields that switch each module on, and every call it knows with what the call shows. # rusty-bidding-bot conventions reference # rbb 0.11.2 rules 025ff0a765f62ceb # 107 modules, 4167 rules # # Calls: P pass, X double, XX redouble; (..) the opponents' calls. # x/y any suit, M a major, m a minor. Text in {..} is filled in when bidding. == base: Natural opening bids file: conventions/base/base.bid skills: basic_bidding/major_suit_openings, basic_bidding/minor_suit_openings, partnership_bidding/basic_bidding define passes_out_artificial = artificial_contract, rho.last=P after (any auction) when opening 1S Major opening: 5+ spades shows hcp>=10, hcp+length_points>=min_open, hcp<=21 | (!forcing_2c, !forcing_1c), S>=5, S>=H, (S>=D, S>=C) | !may5 when style is standard 1H Major opening: 5+ hearts shows hcp>=10, hcp+length_points>=min_open, hcp<=21 | (!forcing_2c, !forcing_1c), H>=5, H>S, (H>=D, H>=C) | !may5 when style is standard 1D 3+ diamonds shows hcp>=10, hcp+length_points>=min_open, hcp<=21 | (!forcing_2c, !forcing_1c), D>=3, D>C | D>=4, D>=C, H<=4 | (H=10, hcp+length_points>=min_open, hcp<=21 | (!forcing_2c, !forcing_1c), C>D | (C=3, D=3), H<=4 | (H=10, hcp+length_points>=min_open, hcp<=21 | (!forcing_2c, !forcing_1c), S>=5, S>=H, (S>=D, S>=C) | !may5, hcp>=11 | S<=5 | H<=3 | controls>=3 | (controls=2, !has(A,S), !has(A,H), !has(A,D), !has(A,C)) when style is not standard 1H Major opening: 5+ hearts shows hcp>=10, hcp+length_points>=min_open, hcp<=21 | (!forcing_2c, !forcing_1c), H>=5, H>S, (H>=D, H>=C) | !may5, hcp>=11 | H<=5 | S<=3 | controls>=3 | (controls=2, !has(A,S), !has(A,H), !has(A,D), !has(A,C)) when style is not standard 1D 3+ diamonds shows hcp>=10, hcp+length_points>=min_open, hcp<=21 | (!forcing_2c, !forcing_1c), D>=3, D>C | D>=4, D>=C, H<=4 | (H=11 | D<=5 | (H<=3, S<=3) | controls>=3 | (controls=2, !has(A,S), !has(A,H), !has(A,D), !has(A,C)) when style is not standard 1C 3+ clubs shows hcp>=10, hcp+length_points>=min_open, hcp<=21 | (!forcing_2c, !forcing_1c), C>D | (C=3, D=3), H<=4 | (H=11 | C<=5 when style is not standard P No opening bid shows hcp<=min_open-1, hcp+length_points<=min_open-1 | hcp<=9 P No opening bid shows hcp=10, longest=6 when style is not standard after (any auction) when opening, seat=3 1S Major opening: 4+ good spades, 10-11 HCP shows S>=4, hcp=10..11, quality(S)>=good 1H Major opening: 4+ good hearts, 10-11 HCP shows H>=4, hcp=10..11, quality(H)>=good, S<=3 after (any auction) when opening, seat=4 P No opening bid: HCP and spades under 15 shows hcp<=14 when hcp+S<=14 after (any auction) when game_reached P No further bid when !passes_out_artificial after (any auction) when game_reached, we.trump is suit, partner.unread, rho.last=P, !(partner.last=P | partner.last=X | partner.last=XX | partner.last=4{trump} | partner.last=5{trump} | partner.last=6{trump} | partner.last=7{trump}) cheapest(trump) Back to the agreed suit after (any auction) when passes_out_artificial cheapest(S) Runout: our best known fit when !lho.named(S), !rho.named(S) cheapest(H) Runout: our best known fit when !lho.named(H), !rho.named(H) cheapest(D) Runout: our best known fit when !lho.named(D), !rho.named(D) cheapest(C) Runout: our best known fit when !lho.named(C), !rho.named(C) after (any auction) when we.forcing=game, !game_reached 4{trump} Game in the agreed suit when we.trump is H | we.trump is S 5{trump} Game in the agreed suit when we.trump is C | we.trump is D 3N Game in notrump when we.trump is none 4S Game in the spade fit shows S+partner.S.min>=8 when we.trump is none 4H Game in the heart fit shows H+partner.H.min>=8 when we.trump is none 5D Game in the diamond fit shows D+partner.D.min>=8 when we.trump is none 5C Game in the club fit shows C+partner.C.min>=8 when we.trump is none == checkback: Checkback Stayman file: conventions/base/checkback.bid card: other_conventions.checkback.play needs: responder-rebids skills: bidding_conventions/checkback after 1x (P) 1M (P) 1N (P) when !tw(x) 2C Checkback: invitational or better, asks about the majors [alert] [artificial] shows M>=5 | (H>=4, S>=4), points>=11 after 1C (P) 1D (P) 1N (P) when !tw(C) 2C Checkback: invitational+, asks for a 4-card major [alert] [artificial] shows H>=4 | S>=4, points>=11 after 1m (P) 1M (P) 1N (P) 2C (P) when !tw(m) 2M Three {M} shows M=3 2H Four hearts, not three spades shows H>=4, S<=2 when M is S 2D No three {M}, no four-card major to show [artificial] after 1H (P) 1S (P) 1N (P) 2C (P) 2S Three spades shows S=3 2D Not three spades [artificial] after 1C (P) 1D (P) 1N (P) 2C (P) when !tw(C) 2H Four hearts shows H>=4 2S Four spades, not four hearts shows S>=4, H<=3 2D No four-card major [artificial] shows H<=3, S<=3 after (any auction) when answered checkback 4H Game in the heart fit shows points>=13, H>=5 | (H>=4, partner.H.min>=4) when partner.H>=3 3H Invitational, heart fit shows points=11..12, H>=5 | (H>=4, partner.H.min>=4) when partner.H>=3 4S Game in the spade fit shows points>=13, S>=5 | (S>=4, partner.S.min>=4) when partner.S>=3 3S Invitational, spade fit shows points=11..12, S>=5 | (S>=4, partner.S.min>=4) when partner.S>=3 3N Game, no fit shows points>=13 2N Invitational, no fit shows points=11..12 == fit: A major-suit fit: agreed, or seen by one hand file: conventions/base/fit.bid needs: base define agreed_fit(x) = trump is x | shown.x.min+partner.x.min>=8 define private_fit(x) = x+partner.x.min>=8, shown.x.min+partner.x.min<=7 define fit_game_values(t) = (longer(t), hcp+length_points+partner.points.min>=25) | (!longer(t), tp(t)+partner.points.min>=25) define fit_slam_call(t) = (no_ask, direct_count(t)) | (!no_ask, shown_fit(t), fit_slam_values(t), !two_bare_beside(t)) define fit_slow_agree(t) = we.forcing=game, partner.t.min>=3, under_game(t), t+partner.t.min>=8, slam_interest(t) define slam_route = fit_slow_agree(S) | fit_slow_agree(H) | fit_slam_call(S) | fit_slam_call(H) define fit_slam_room(t) = (slam_interest(t), !partner.last=3N) | (partner.last=3N, hcp+partner.hcp.min>=32) define other_major_open(x) = x>=4, partner.x.max>=4 define partner_named(x) = partner.last=1{x} | partner.last=2{x} | partner.last=3{x} | partner.last=4{x} after (any auction) when !asked, we.trump is none, !game_reached | partner.last=3N, !they.bid | rho.last=P, me.has_bid, !(partner.last=2N, partner.hcp.min>=20), !(partner.last=3N, partner.hcp.min>=24, texas | tu), partner.last=1N | partner.last=2N | partner.last=3N | answered nmf | answered majors 4S Game in the spade fit shows S+partner.S.min>=8, fit_game_values(S) when shown.S.min+partner.S.min<=7 | partner.last=3N, partner.S.min>=2, !partner_named(S), !slam_route, !fit_slam_room(S), !other_major_open(H) 4H Game in the heart fit shows H+partner.H.min>=8, fit_game_values(H) when shown.H.min+partner.H.min<=7 | partner.last=3N, partner.H.min>=2, !partner_named(H), !slam_route, !fit_slam_room(H), !other_major_open(S) == fourth-suit-forcing: Fourth suit forcing file: conventions/base/fourth-suit-forcing.bid needs: base skills: bidding_conventions/fourth_suit_forcing define fsf_on = fsf_play | fsf_round | fsf_gf define fsf_game = fsf_gf | (fsf_play, !fsf_round) after 1x (P) 1y (P) 1z (P) | 1x (P) 1y (P) 2z (P) when y is not x, z is not x, z is not y, !tw(x) cheapest(w) Fourth suit forcing: game values [alert] [artificial] shows points>=13 when fsf_on, fsf_game, w is not x, w is not y, w is not z, cheapest_rank(w)<=13, !passed_hand cheapest(w) Fourth suit forcing: 12+ [alert] [artificial] shows points>=12 when fsf_on, !fsf_game, w is not x, w is not y, w is not z, cheapest_rank(w)<=13, !passed_hand after (any auction) when asked fsf(x,y,z,w) cheapest(y) Three-card support for {y} shows y>=3 cheapest(N) A stopper in {w} shows stop(w), y<=2 cheapest(x) Five or more {x} shows x>=5, y<=2, !stop(w) cheapest(z) Five or more {z} as well shows z>=5, y<=2, !stop(w) cheapest(w) Four cards in {w} shows w>=4, y<=2, !stop(w) cheapest(x) No support, no stopper in {w} after (any auction) when answered fsf(x,y,z,w) 4y Game in the {y} fit shows we.fit(y).min>=8, points>=12 when y is H | y is S 3N Game in notrump shows points>=12 P No game: invitational values shows points<=12 when !we.gf == gambling-3nt: Gambling 3NT: a solid minor file: conventions/base/gambling-3nt.bid card: notrump.three_nt.one_suit needs: preempts skills: bidding_conventions/gambling_3nt after (any auction) when opening, seat<=3 3N Gambling: a solid seven-card minor, no outside ace or king [alert] shows C>=7, has(A,C), has(K,C), has(Q,C), D<=3, S<=4, H<=4, !has(A,S), !has(K,S), !has(A,H), !has(K,H), !has(A,D), !has(K,D) 3N Gambling: a solid seven-card minor, no outside ace or king [alert] shows D>=7, has(A,D), has(K,D), has(Q,D), C<=3, S<=4, H<=4, !has(A,S), !has(K,S), !has(A,H), !has(K,H), !has(A,C), !has(K,C) after 3N (P) P To play: the other suits stopped shows stop(S), stop(H), stop(C) | stop(D), hcp>=10 4C Pass or correct: to play in your minor [alert] 5C Pass or correct: game in your minor [alert] shows S<=1 | H<=1, C>=3, D>=3 6C Pass or correct: slam in your minor [alert] shows hcp>=16, quick_tricks>=4 4H To play: a long heart suit shows H>=7 | (H>=6, hcp>=10) 4S To play: a long spade suit shows S>=7 | (S>=6, hcp>=10) after 3N (P) 4C (P) | 3N (P) 5C (P) | 3N (P) 6C (P) P My minor is clubs shows C>=7 cheapest(D) My minor is diamonds shows D>=7 after 3N (P) 4H (P) | 3N (P) 4S (P) P Partner's suit: to play after 3N (P) 4C (P) 4D (P) | 3N (P) 5C (P) 5D (P) | 3N (P) 6C (P) 6D (P) P To play in opener's diamonds == game-force: When the auction forces to game file: conventions/base/game-force.bid needs: base skills: bidding_conventions/two_over_one force game when partner.opened, !they.bid, me.bids=2, call>=3C, call<=3S, !(we.trump is suit, call=3{trump}) force game after 1x (P) 1y (P) 2N (P) when !call=P, !(wolff, call=3C) == ingberman: Ingberman 2NT after opener's reverse file: conventions/base/ingberman.bid card: other_conventions.ingberman_2nt.play needs: responder-rebids skills: bidding_conventions/ingberman after 1x (P) 1y (P) 2z (P) when z is not x, z is not y, we.forcing=round, !tw(x) 2N Ingberman: weak, relay to 3♣ [alert] [artificial] shows points<=8 2y Five or more {y}, forcing one round shows y>=5, points>=6 3x Three or more {x}: game forcing shows x>=3, points>=9 3z Four or more {z}: game forcing shows z>=4, points>=9 3y Six or more {y}: game forcing shows y>=6, points>=9 3N Game: no fit, 9+ shows points>=9, z<=3 after (any auction) when asked ingberman 3C Forced: 3♣ as asked [alert] [artificial] after 1x (P) 1y (P) 2z (P) 2N (P) 3C (P) when answered ingberman 3z Weak, four or more {z}: invitational shows z>=4 3y Weak, six or more {y}: to play shows y>=6 P Weak: to play in clubs shows C>=2 when x is C 3x Weak: to play in {x} shows x>=2 when x is not C P Weak: to play in clubs shows C>=5 when x is not C after 1x (P) 1y (P) 2z (P) 2y (P) when asked ing_suit 3y Three-card support for {y} shows y>=3 3x Six or more {x} shows x>=6, y<=2 3z Five or more {z} shows z>=5, y<=2 3N 19+, no fit shows hcp>=19, y<=2 2N No fit for {y} shows y<=2 after 1x (P) 1y (P) 2z (P) 2y (P) 2N (P) when answered ing_suit P Weak: no game shows points<=8 3y Six or more {y}: to play shows y>=6, points<=8 3N Game: 9+ shows points>=9 after 1x (P) 1y (P) 2z (P) 2y (P) 3y (P) when answered ing_suit P Weak: no game shows points<=7 4y Game shows points>=8 when y is H | y is S 3N Game shows points>=8 when y is C | y is D after 1x (P) 1y (P) 2z (P) 2y (P) 3x (P) | 1x (P) 1y (P) 2z (P) 2y (P) 3z (P) when answered ing_suit P Weak: no game shows points<=7 3N Game shows points>=8 == inverted-minors: Inverted minor raises file: conventions/base/inverted-minors.bid card: minor_openings.inverted_minors.play needs: responses skills: bidding_conventions/inverted_minors after 1m (P) 2m Inverted raise: 10+, 4+ {m}, no 4-card major, forcing shows m>=4, hcp>=10, H<=3, S<=3 3m Weak raise: 5-9, 5+ {m}, no 4-card major shows m>=5, hcp=5..9, H<=3, S<=3 after 1m (P) 3m (P) 3N Game opposite the weak raise: 18+, balanced shows hcp>=18, balanced | semibalanced 5m Game opposite the weak raise: 18+, unbalanced shows hcp>=18 P No game opposite the weak raise shows hcp<=17 after 1C (P) 2C (P) 2N 12-14 balanced shows balanced, hcp<=14 3N 18-19 balanced shows balanced, hcp>=18 3C Minimum, unbalanced shows !balanced, hcp<=14 2D Extras or shape, a diamond stopper shows stop(D), hcp>=15 | !balanced 2H Extras or shape, a heart stopper shows stop(H), hcp>=15 | !balanced, !stop(D) 2S Extras or shape, a spade stopper shows stop(S), hcp>=15 | !balanced, !stop(H), !stop(D) 3H Splinter: heart shortness, four clubs shows H<=1, C>=4, hcp>=13 3S Splinter: spade shortness, four clubs shows S<=1, C>=4, hcp>=13 4C Slam try, extras and a fit shows C>=4, hcp>=16, !balanced after 1C (P) 2C (P) 2N (P) 3N Game values shows hcp>=12 | (hcp>=11, C>=5) 3C Minimum, to play shows hcp<=11, hcp<=10 | C<=4, !balanced P Minimum, balanced shows hcp<=11, hcp<=10 | C<=4, balanced after 1C (P) 2C (P) 2N (P) 3C (P) P No further bid after 1C (P) 2C (P) 3C (P) 3N Game values, the majors held shows hcp>=12, stop(S), stop(H) 5C Game values shows hcp>=13 P Minimum shows hcp<=12 after 1C (P) 2C (P) 4C (P) 5C Declines the slam try after 1C (P) 2C (P) 2D (P) | 1C (P) 2C (P) 2H (P) | 1C (P) 2C (P) 2S (P) 2N 10-12, balanced shows hcp<=12, balanced 3N Game values shows hcp>=13 3C 10-12, unbalanced shows hcp<=12 after 1C (P) 2C (P) 2D (P) 2N (P) | 1C (P) 2C (P) 2H (P) 2N (P) | 1C (P) 2C (P) 2S (P) 2N (P) 3N Game shows hcp>=15 3C Minimum, unbalanced shows hcp<=14 after 1C (P) 2C (P) 3H (P) 3N A heart stopper shows hcp>=10, stop(H) 5C Game in clubs shows hcp>=12 4C Minimum shows hcp<=11 after 1C (P) 2C (P) 3S (P) 3N A spade stopper shows hcp>=10, stop(S) 5C Game in clubs shows hcp>=12 4C Minimum shows hcp<=11 after 1D (P) 2D (P) 2N 12-14 balanced shows balanced, hcp<=14 3N 18-19 balanced shows balanced, hcp>=18 3D Minimum, unbalanced shows !balanced, hcp<=14 2H Extras or shape, a heart stopper shows stop(H), hcp>=15 | !balanced 2S Extras or shape, a spade stopper shows stop(S), hcp>=15 | !balanced, !stop(H) 3H Splinter: heart shortness, four diamonds shows H<=1, D>=4, hcp>=13 3S Splinter: spade shortness, four diamonds shows S<=1, D>=4, hcp>=13 4D Slam try, extras and a fit shows D>=4, hcp>=16, !balanced after 1D (P) 2D (P) 2N (P) 3N Game values shows hcp>=12 | (hcp>=11, D>=5) 3D Minimum, to play shows hcp<=11, hcp<=10 | D<=4, !balanced P Minimum, balanced shows hcp<=11, hcp<=10 | D<=4, balanced after 1D (P) 2D (P) 2N (P) 3D (P) P No further bid after 1D (P) 2D (P) 3D (P) 3N Game values, the majors held shows hcp>=12, stop(S), stop(H) 5D Game values shows hcp>=13 P Minimum shows hcp<=12 after 1D (P) 2D (P) 4D (P) 5D Declines the slam try after 1D (P) 2D (P) 2H (P) | 1D (P) 2D (P) 2S (P) 2N 10-12, balanced shows hcp<=12, balanced 3N Game values shows hcp>=13 3D 10-12, unbalanced shows hcp<=12 after 1D (P) 2D (P) 2H (P) 2N (P) | 1D (P) 2D (P) 2S (P) 2N (P) 3N Game shows hcp>=15 3D Minimum, unbalanced shows hcp<=14 after 1D (P) 2D (P) 3H (P) 3N A heart stopper shows hcp>=10, stop(H) 5D Game in diamonds shows hcp>=12 4D Minimum shows hcp<=11 after 1D (P) 2D (P) 3S (P) 3N A spade stopper shows hcp>=10, stop(S) 5D Game in diamonds shows hcp>=12 4D Minimum shows hcp<=11 after 1C (P) 2C (P) 3x (P) 4C (P) when x is H | x is S P No further bid after 1D (P) 2D (P) 3x (P) 4D (P) when x is H | x is S P No further bid == new-minor-forcing: New Minor Forcing file: conventions/base/new-minor-forcing.bid card: other_conventions.new_minor_forcing.play needs: responder-rebids skills: bidding_conventions/new_minor_forcing after 1C (P) 1M (P) 1N (P) when !checkback, !roudi, !twoway, !xyz, !tw(C) 2D New Minor Forcing: invitational+, 5+ {M} or both majors [alert] [artificial] shows M>=4, points>=11 after 1D (P) 1M (P) 1N (P) when !checkback, !roudi, !twoway, !xyz 2C New Minor Forcing: invitational+, 5+ {M} or both majors [alert] [artificial] shows M>=4, points>=11 after (any auction) when asked nmf 2H Three hearts shows H=3 when partner.H>=4 2S Three spades shows S=3 when partner.S>=4 2H Four hearts, not three spades shows H>=4, S<=2 when partner.S>=4 2N No fit, minimum: 12-13 HCP shows hcp<=13 3N No fit, maximum: 14 HCP shows hcp>=14 after (any auction) when answered nmf 4H Game in the heart fit shows points>=13, H>=5 | (H>=4, partner.H.min>=4) when partner.H>=3 3H Invitational, heart fit shows points=11..12, H>=5 | (H>=4, partner.H.min>=4) when partner.H>=3 4S Game in the spade fit shows points>=13, S>=5 when partner.S>=3 3S Invitational, spade fit shows points=11..12, S>=5 when partner.S>=3 3N Game, no fit shows points>=13 2N Invitational, no fit shows points=11..12 P Accepts the notrump game when partner.last=3N P No game: opener is minimum shows points<=12 when partner.last=2N == nmf-after-2nt: New Minor Forcing after a 2NT rebid file: conventions/base/nmf-after-2nt.bid card: other_conventions.new_minor_forcing.after_2nt_rebid needs: responder-rebids skills: bidding_conventions/new_minor_forcing after 1C (P) 1M (P) 2N (P) when !tw(C) 3D New Minor Forcing: three {M}? four of the other major? [alert] [artificial] shows M>=5 | (H>=4, S>=4), M<=5, points>=7 after 1D (P) 1M (P) 2N (P) when !wolff 3C New Minor Forcing: three {M}? four of the other major? [alert] [artificial] shows M>=5 | (H>=4, S>=4), M<=5, points>=7 after 1H (P) 1S (P) 2N (P) 3C New Minor Forcing: three spades? [alert] [artificial] shows S=5, points>=7 after (any auction) when asked nmf2n 3H Three hearts shows H=3 when partner.H>=4 3S Three spades shows S=3 when partner.S>=4 3S Four spades, not three hearts shows S>=4, H<=2 when partner.H>=4 3H Four hearts, not three spades shows H>=4, S<=2 when partner.S>=4 3N No fit after (any auction) when answered nmf2n 4H Game in the heart fit shows H>=5 | (H>=4, partner.H.min>=4) when partner.H>=3 4S Game in the spade fit shows S>=5 | (S>=4, partner.S.min>=4) when partner.S>=3 3N Game in notrump P Opener's 3NT: play there when partner.last=3N == preempts: Weak two-bids and preempts file: conventions/base/preempts.bid needs: base skills: bidding_conventions/weak_2s, bidding_conventions/preemptive_bids, partnership_bidding/weak_twos define weak_2d_open = !flannery, !multi, !benjamin, !mini_roman, !french, !wilkosz, !prec_2d define weak_2h_open = !multi, !polish define weak_2s_open = !multi, !polish define weak_two_suit(x) = x is not D | (!flannery, !multi, !benjamin, !mini_roman, !french, !wilkosz, !prec_2d), x is not H | (!multi, !polish), x is not S | (!multi, !polish) after (any auction) when opening, seat<=2 2D Weak two: six diamonds, 4-9 shows D=6, hcp=4..9, H<=3, S<=3 when two_d is weak, weak_2d_open, style is standard, !vul 2D Weak two: six diamonds, 4-9, a good suit shows D=6, hcp=4..9, H<=3, S<=3, quality(D)>=good | top5(D)>=3 when two_d is weak, weak_2d_open, style is standard, vul 2H Weak two: six hearts, 4-10 shows H=6, hcp=4..10, S<=3 when two_h is weak, weak_2h_open, style is standard, !vul 2H Weak two: six hearts, 4-10, a good suit shows H=6, hcp=4..10, S<=3, quality(H)>=good | top5(H)>=3 when two_h is weak, weak_2h_open, style is standard, vul 2S Weak two: six spades, 4-10 shows S=6, hcp=4..10 when two_s is weak, weak_2s_open, style is standard, !vul 2S Weak two: six spades, 4-10, a good suit shows S=6, hcp=4..10, quality(S)>=good | top5(S)>=3 when two_s is weak, weak_2s_open, style is standard, vul 2D Weak two: six diamonds, 4-10 shows D=6, hcp=4..10, H<=3 | (!has(A,H), !has(K,H), !has(Q,H), !has(J,H)), S<=3 | (!has(A,S), !has(K,S), !has(Q,S), !has(J,S)), hcp<=9 | !has(A,D) | (!has(A,S), !has(A,H), !has(A,C)) when two_d is weak, weak_2d_open, style is not standard, system is not brill, !vul 2D Weak two: six diamonds, 4-10, a good suit shows D=6, hcp=4..10, quality(D)>=good | top5(D)>=3, H<=3 | (!has(A,H), !has(K,H), !has(Q,H), !has(J,H)), S<=3 | (!has(A,S), !has(K,S), !has(Q,S), !has(J,S)), hcp<=9 | !has(A,D) | (!has(A,S), !has(A,H), !has(A,C)) when two_d is weak, weak_2d_open, style is not standard, system is not brill, vul 2H Weak two: six hearts, 4-10 shows H=6, hcp=4..10, S<=3 | (!has(A,S), !has(K,S), !has(Q,S), !has(J,S)), hcp<=9 | !has(A,H) | (!has(K,H), !has(A,S), !has(A,D), !has(A,C)) when two_h is weak, weak_2h_open, style is not standard, system is not brill, !vul 2H Weak two: six hearts, 4-10, a good suit shows H=6, hcp=4..10, quality(H)>=good | top5(H)>=3, S<=3 | (!has(A,S), !has(K,S), !has(Q,S), !has(J,S)), hcp<=9 | !has(A,H) | (!has(K,H), !has(A,S), !has(A,D), !has(A,C)) when two_h is weak, weak_2h_open, style is not standard, system is not brill, vul 2S Weak two: six spades, 4-10 shows S=6, hcp=4..10, H<=3 | (!has(A,H), !has(K,H), !has(Q,H), !has(J,H)), hcp<=9 | !has(A,S) | (!has(K,S), !has(A,H), !has(A,D), !has(A,C)) when two_s is weak, weak_2s_open, style is not standard, system is not brill, !vul 2S Weak two: six spades, 4-10, a good suit shows S=6, hcp=4..10, quality(S)>=good | top5(S)>=3, H<=3 | (!has(A,H), !has(K,H), !has(Q,H), !has(J,H)), hcp<=9 | !has(A,S) | (!has(K,S), !has(A,H), !has(A,D), !has(A,C)) when two_s is weak, weak_2s_open, style is not standard, system is not brill, vul 2D Weak two: six diamonds, 5-10, no five-card major shows D=6, hcp=5..10, H<=4, S<=4, hcp<=9 | !has(A,D) | (!has(A,S), !has(A,H), !has(A,C)) when two_d is weak, weak_2d_open, system is brill 2H Weak two: six hearts, 5-10, no five spades shows H=6, hcp=5..10, S<=4, hcp<=9 | !has(A,H) | (!has(K,H), !has(A,S), !has(A,D), !has(A,C)) when two_h is weak, weak_2h_open, system is brill 2S Weak two: six spades, 5-10, no five hearts shows S=6, hcp=5..10, H<=4, hcp<=9 | !has(A,S) | (!has(K,S), !has(A,H), !has(A,D), !has(A,C)) when two_s is weak, weak_2s_open, system is brill after (any auction) when opening, seat=3 2D Weak two: five or six diamonds, 4-9 shows D>=5, D<=6, hcp=4..9, H<=3, S<=3 when two_d is weak, weak_2d_open, D>=6 | quality(D)>=good 2H Weak two: five or six hearts, 4-9 shows H>=5, H<=6, hcp=4..9, S<=3 when two_h is weak, weak_2h_open, H>=6 | quality(H)>=good 2S Weak two: five or six spades, 4-9 shows S>=5, S<=6, hcp=4..9 when two_s is weak, weak_2s_open, S>=6 | quality(S)>=good after (any auction) when opening, seat=4 2D Fourth seat: six diamonds, opening values shows D>=6, hcp>=12, hcp<=21 when two_d is weak, weak_2d_open 2H Fourth seat: six hearts, opening values shows H>=6, hcp>=12, hcp<=21 when two_h is weak, weak_2h_open 2S Fourth seat: six spades, opening values shows S>=6, hcp>=12, hcp<=21 when two_s is weak, weak_2s_open after (any auction) when opening, seat<=3 3C Preempt: seven clubs, 4-9 shows C=7, hcp=4..9, H<=3, S<=3 when !vul | quality(C)>=good | top5(C)>=3, system is not brill 3D Preempt: seven diamonds, 4-9 shows D=7, hcp=4..9, H<=3, S<=3 when !vul | quality(D)>=good | top5(D)>=3, system is not brill 3H Preempt: seven hearts, 4-9 shows H=7, hcp=4..9, S<=3 when !vul | quality(H)>=good | top5(H)>=3, system is not brill 3S Preempt: seven spades, 4-9 shows S=7, hcp=4..9 when !vul | quality(S)>=good | top5(S)>=3, system is not brill 3C Preempt: seven clubs, 4-9, no five-card major shows C=7, hcp=4..9, H<=4, S<=4 when !vul | quality(C)>=good | top5(C)>=3, system is brill 3D Preempt: seven diamonds, 4-9, no five-card major shows D=7, hcp=4..9, H<=4, S<=4 when !vul | quality(D)>=good | top5(D)>=3, system is brill 3H Preempt: seven hearts, 4-9, no five spades shows H=7, hcp=4..9, S<=4 when !vul | quality(H)>=good | top5(H)>=3, system is brill 3S Preempt: seven spades, 4-9, no five hearts shows S=7, hcp=4..9, H<=4 when !vul | quality(S)>=good | top5(S)>=3, system is brill 4H Preempt: eight hearts shows H>=8, hcp=4..10, S<=3 4S Preempt: eight spades shows S>=8, hcp=4..10 5C Preempt: eight clubs shows C>=8, hcp=4..10, H<=3, S<=3 when system is not brill 5D Preempt: eight diamonds shows D>=8, hcp=4..10, H<=3, S<=3 when system is not brill 4C Preempt: seven or eight clubs, no five-card major shows C=8 | (C=7, shortest=0), hcp=4..10, H<=4, S<=4 when system is brill 4D Preempt: seven or eight diamonds, no five-card major shows D=8 | (D=7, shortest=0), hcp=4..10, H<=4, S<=4 when system is brill 5C Preempt: nine or more clubs shows C>=9, hcp=4..10, H<=4, S<=4 when system is brill 5D Preempt: nine or more diamonds shows D>=9, hcp=4..10, H<=4, S<=4 when system is brill 3D Preempt: six diamonds and four clubs, 4-8 shows D=6, C=4, hcp=4..8 when !vul, seat<=2, style is bba 3C Preempt: six clubs and four diamonds, 4-8 shows C=6, D=4, hcp=4..8 when !vul, seat<=2, style is bba after 3H (P) 4H Raise to game shows H>=4 | (H=3, tp(H)>=9) | (H=2, hcp>=15) after 3S (P) 4S Raise to game shows S>=4 | (S=3, tp(S)>=9) | (S=2, hcp>=15) after 3C (P) 3N To play: 16+, A or K of clubs, side suits stopped shows hcp>=16, has(A,C) | has(K,C), stop(S), stop(H), stop(D) 4H To play: seven hearts shows H>=7, hcp>=12 4S To play: seven spades shows S>=7, hcp>=12 5C Game in clubs: 17+ and a doubleton shows C>=2, hcp>=17 5C Game in clubs shows C>=4, shortest<=1 | hcp>=12 | (C>=3, hcp>=15, shortest<=1) when !vul 4C Preemptive raise shows C>=3, hcp<=11 when !vul 5C Game in clubs shows C>=3, hcp>=15 | (C>=4, hcp>=12, shortest<=1) when vul 4C Invitational raise shows C>=2, hcp=9..14 when vul after 3D (P) 3N To play: 16+, A or K of diamonds, side suits stopped shows hcp>=16, has(A,D) | has(K,D), stop(S), stop(H), stop(C) 4H To play: seven hearts shows H>=7, hcp>=12 4S To play: seven spades shows S>=7, hcp>=12 5D Game in diamonds: 17+ and a doubleton shows D>=2, hcp>=17 5D Game in diamonds shows D>=4, shortest<=1 | hcp>=12 | (D>=3, hcp>=15, shortest<=1) when !vul 4D Preemptive raise shows D>=3, hcp<=11 when !vul 5D Game in diamonds shows D>=3, hcp>=15 | (D>=4, hcp>=12, shortest<=1) when vul 4D Invitational raise shows D>=2, hcp=9..14 when vul after 3x (P) when x is not N P No game: no fit, or not enough after 3x (P) 4x (P) when x is C | x is D P No further bid == rebids: Opener's rebid file: conventions/base/rebids.bid needs: responses skills: partnership_bidding/rebids, bidding_conventions/reverse_bids define nt_jump_to_game = cheapest_rank(S)<=13 | partner.last=2S | rho.last=2S define tw(x) = twalsh, x is C define bergen21 = gf21, we.gf, style21 is bergen define lawrence21 = gf21, we.gf, style21 is lawrence define schuler21 = gf21, we.gf, style21 is schuler define semi_1nt(x) = semi, gf21, x is H | x is S after 1x (P) 1y (P) when !tw(x) 2y Raise: 4+ {y}, minimum shows y>=4, tp(y)<=15 when style is not bba 3y Jump raise: 4+ {y}, 16-18 shows y>=4, tp(y)=16..18 when y is H | y is S, style is not bba 2y Raise: 4+ {y}, minimum shows y>=4, hcp+length_points<=14 when style is bba 3y Jump raise: 4+ {y}, 15-17 shows y>=4, hcp+length_points>=15, hcp<=17, hcp<=16 | tp(y)<=18 when y is H | y is S, style is bba 3y Jump raise: 4+ {y}, 16+ shows y>=4, tp(y)>=16 when y is C | y is D 2x Rebids {x}: 6+, minimum shows x>=6, suit_points<=15 when x is H | x is S 2x Rebids {x}: 5+, minimum shows x>=5, suit_points<=15 when x is C | x is D, x>=6 3x Jump rebid: 6+ {x}, 16-18 shows x>=6, suit_points=16..18 when style is not bba 3x Jump rebid: 6+ {x}, 15-18 shows x>=6, hcp=15..18 when style is bba 2x Rebids {x}: 5+ shows x>=5, suit_points<=18 when x is C | x is D 1N 12-14 HCP, balanced shows balanced | shape 5-4-2-2, hcp=12..14, y<=3 2N 18+ HCP, balanced shows balanced | shape 5-4-2-2, hcp>=18, y<=3 2N 18-19 HCP, balanced shows balanced, hcp=18..19, y<=3 1N Minimum, no fit shows hcp<=14, y<=3 3x Jump rebid: 6+ {x}, 16+ shows x>=6, suit_points>=16 2N 15-17 HCP, balanced shows balanced, hcp=15..17, y<=3 after 1x (P) 1M (P) when !tw(x) 4M Game raise: 4+ {M}, 19+ shows M>=4, tp(M)>=19 when style is not bba 4M Game raise: 4+ {M} shows M>=4, hcp>=18 | (hcp>=17, tp(M)>=19) when style is bba after 1C (P) 1D (P) when !tw(C) 1N 12-14 HCP, balanced, may hold a 4-card major shows balanced | shape 5-4-2-2, hcp=12..14 when style is not bba, style is not standard, walsh 1N 12-14 HCP, balanced, no four-card major shows balanced | shape 5-4-2-2, hcp=12..14, H<=3, S<=3 when style is standard | !walsh 1H 4+ hearts, up to 18 shows H>=4, suit_points<=18, H>=S when style is not bba | S>=4 | !walsh 1S 4+ spades, up to 18 shows S>=4, suit_points<=18, S>H when style is not bba | !walsh 2H Jump shift: 4+ hearts, 19+ shows H>=4, suit_points>=19 when style is not bba 2S Jump shift: 4+ spades, 19+ shows S>=4, suit_points>=19 when style is not bba 1N 12-17 HCP, not both majors shows hcp=12..17, H<=4, S<=4, H<=3 | S<=3, C<=5, D<=4, shortest>=2 | C=5 when style is bba, walsh 2H Jump shift: 4+ hearts, 18+ shows H>=4, hcp>=18, H>=S when style is bba 2S Jump shift: 4+ spades, 18+ shows S>=4, hcp>=18, S>H when style is bba after 1C (P) 1H (P) when !tw(C) 1S 4+ spades, up to 18 shows S>=4, suit_points<=18 when H<=3 2D Reverse: 4+ diamonds, longer clubs, 17+ shows D>=4, C>D, suit_points>=17 2S Jump shift: 4+ spades, 19+ shows S>=4, suit_points>=19 3D Jump shift: 4+ diamonds, 19+ shows D>=4, suit_points>=19 after 1C (P) 1S (P) when !tw(C) 2D Reverse: 4+ diamonds, longer clubs, 17+ shows D>=4, C>D, suit_points>=17 2H Reverse: 4+ hearts, longer clubs, 17+ shows H>=4, C>H, suit_points>=17 3D Jump shift: 4+ diamonds, 19+ shows D>=4, suit_points>=19 3H Jump shift: 4+ hearts, 19+ shows H>=4, suit_points>=19 after 1D (P) 1H (P) 1S 4+ spades, up to 18 shows S>=4, suit_points<=18 when H<=3 1N 12-14 HCP, balanced shows balanced, hcp=12..14, H<=3 when style is not bba 1N 12-13 HCP, balanced shows balanced, hcp=12..13, H<=3, C=4 when style is bba 2C 4+ clubs, up to 18 shows C>=4, suit_points<=18, D>=C 2S Jump shift: 4+ spades, 19+ shows S>=4, suit_points>=19 3C Jump shift: 4+ clubs, 19+ shows C>=4, suit_points>=19 after 1D (P) 1S (P) 2C 4+ clubs, up to 18 shows C>=4, suit_points<=18, D>=C 1N 12-14 HCP, balanced shows balanced, hcp=12..14, S<=3 when style is not bba 1N 12-13 HCP, balanced shows balanced, hcp=12..13, S<=3, C=4 when style is bba 2H Reverse: 4+ hearts, longer diamonds, 17+ shows H>=4, D>H, suit_points>=17 3C Jump shift: 4+ clubs, 19+ shows C>=4, suit_points>=19 3H Jump shift: 4+ hearts, 19+ shows H>=4, suit_points>=19 after 1H (P) 1S (P) 2C 4+ clubs, up to 18 shows C>=4, suit_points<=18 2D 4+ diamonds, up to 18 shows D>=4, suit_points<=18, D>=C | C<=3 3C Jump shift: 4+ clubs, 19+ shows C>=4, suit_points>=19 3D Jump shift: 4+ diamonds, 19+ shows D>=4, suit_points>=19 after 1x (P) 1N (P) P Minimum, to play shows suit_points<=15 when !semi_1nt(x) P Balanced, no game shows balanced, hcp<=17 when !semi_1nt(x) 2x Rebids {x}: 5+, 16-18 shows x>=5, suit_points=16..18 2x Rebids {x}: 6+, minimum shows x>=6, suit_points<=15 3x Jump rebid: 6+ {x}, 16-18 shows x>=6, suit_points=16..18 when style is not bba 2N 18-19 HCP, balanced shows balanced, hcp=18..19 3N Game: 18+ shows hcp>=18 3x Jump rebid: 6+ {x}, 15-18 shows x>=6, hcp=15..18 when style is bba after 1S (P) 1N (P) 2C 4+ clubs, up to 18 shows C>=4, suit_points<=18 when !(we.forcing=round | semi_1nt(S)) 2D 4+ diamonds, up to 18 shows D>=4, suit_points<=18, D>=C | C<=3 when !(we.forcing=round | semi_1nt(S)) 2H 4+ hearts, up to 18 shows H>=4, suit_points<=18 3C Jump shift: 4+ clubs, 19+ shows C>=4, suit_points>=19 3D Jump shift: 4+ diamonds, 19+ shows D>=4, suit_points>=19 3H Jump shift: 4+ hearts, 19+ shows H>=4, suit_points>=19 3H Jump shift: 4+ hearts, 17+ shows H>=4, suit_points>=17 when style is bba 3C Jump shift: 4+ clubs, 18+ shows C>=4, suit_points>=18 when style is bba 3D Jump shift: 4+ diamonds, 18+ shows D>=4, suit_points>=18 when style is bba 4H 5-5 in the majors, 16+ shows H>=5, hcp>=16 when style is bba after 1H (P) 1N (P) 2C 4+ clubs, up to 18 shows C>=4, suit_points<=18 when !(we.forcing=round | semi_1nt(H)) 2D 4+ diamonds, up to 18 shows D>=4, suit_points<=18, D>=C | C<=3 when !(we.forcing=round | semi_1nt(H)) 2S Reverse: 4+ spades, longer hearts, 17+ shows S>=4, H>S, suit_points>=17 3C Jump shift: 4+ clubs, 19+ shows C>=4, suit_points>=19 3D Jump shift: 4+ diamonds, 19+ shows D>=4, suit_points>=19 3C Jump shift: 4+ clubs, 18+ shows C>=4, suit_points>=18 when style is bba 3D Jump shift: 4+ diamonds, 18+ shows D>=4, suit_points>=18 when style is bba after 1D (P) 1N (P) 2C 4+ clubs, up to 18 shows C>=4, suit_points<=18 2H Reverse: 4+ hearts, longer diamonds, 17+ shows H>=4, D>H, suit_points>=17 2S Reverse: 4+ spades, longer diamonds, 17+ shows S>=4, D>S, suit_points>=17 after 1C (P) 1N (P) 2D Reverse: 4+ diamonds, longer clubs, 17+ shows D>=4, C>D, suit_points>=17 2H Reverse: 4+ hearts, longer clubs, 17+ shows H>=4, C>H, suit_points>=17 2S Reverse: 4+ spades, longer clubs, 17+ shows S>=4, C>S, suit_points>=17 after 1m (P) 1y (P) | 1m (P) 2y (P) 3N 18-21 with six or more {m}: to play shows m>=6, hcp=18..21 when y is not m, !weak_js | !partner.jumped after 1M (P) 1y (P) | 1M (P) 2y (P) 4M 19+ with six or more {M}: game shows M>=6, hcp+length_points>=19 when y is not M, style is not bba, !we.gf 4M Game: seven {M} and 13+, or six and 19+ shows M>=6, (M>=7, hcp>=13) | hcp>=19 when y is not M, style is bba, !we.gf after 1m (P) 1N (P) 3N 18-21 with six or more {m}: to play shows m>=6, hcp=18..21 after 1M (P) 1N (P) when semi_1nt(M) P Semi-forcing 1NT: balanced minimum, to play shows balanced, hcp<=14 after 1M (P) 1N (P) when we.forcing=round | semi_1nt(M) 2C Forcing 1NT: clubs, three or more, up to 18 shows C>=3, suit_points<=18 when C>=4 2D Forcing 1NT: diamonds, three or more, up to 18 shows D>=3, suit_points<=18 when D>=4, D>=C | C<=3 2C Forcing 1NT: three or more clubs shows C>=3, C>=D, suit_points<=18, M<=5 2D Forcing 1NT: three or more diamonds shows D>=3, D>C, suit_points<=18, M<=5 2N Forcing 1NT: 18-19, balanced shows balanced, hcp=18..19 2M Rebids {M}: six or more, minimum shows M>=6, suit_points<=15 2M Rebids {M}: six or more, minimum shows M>=5, suit_points<=15, C<=2, D<=2 after 1M (P) 1N (P) 4M 19+ with six or more {M}: game shows M>=6, hcp+length_points>=19 when style is not bba 4M Game: seven {M} and 13+, or six and 19+ shows M>=6, (M>=7, hcp>=13) | hcp>=19 when style is bba after 1x (P) 2x (P) when !inverted | x is H | x is S P Minimum: no game shows tp(x)<=16, tp(x)<=14 | x is C | x is D | partner.tp(x).max<=10 when style is not bba | x is C | x is D 3x Invitation: game try in {x} shows tp(x)=17..18 | (tp(x)=15..16, x is H | x is S, partner.tp(x).max>=11) when style is not bba | x is C | x is D after 1M (P) 2M (P) 4M Game: 19+ with the fit shows tp(M)>=19 when style is not bba P Minimum: no game shows hcp<=15, M<=5 | hcp<=13 when style is bba 3M Invitation: game try in {M} shows (hcp=16, M<=5, tp(M)<=18) | (hcp=14..15, M>=6) when style is bba 4M Game: 17+, or 16 with shape shows hcp>=17 | (hcp=16, M>=6 | tp(M)>=19) when style is bba after 1m (P) 2m (P) when !inverted 2N 18-19 HCP, balanced shows balanced, hcp=18..19 3N 20-21 HCP, balanced shows balanced, hcp>=20 3N Nine tricks: a running {m}, the other suits stopped shows m>=6, quality(m)>=2, hcp>=16, stop(C) | m is C, stop(D) | m is D, stop(H), stop(S) 5{m} Game: 19+ support points, no notrump shows tp(m)>=19 after 1M (P) 3M (P) 4M Accepts the limit raise shows tp(M)>=15 P Declines: minimum shows tp(M)<=14 after 1m (P) 3m (P) 3N Accepts, balanced: 14+ shows hcp>=14, balanced | semibalanced 5m Accepts, unbalanced: game in the minor shows hcp>=14 P Declines: minimum shows hcp<=13 after 1m (P) 2N (P) 3N Accepts: 14+ shows hcp>=14 P Declines: 12-13 shows hcp<=13 after 1y (P) 2x (P) 2z (P) 2N (P) when x is not y, we.gf 6N Slam in notrump shows points+partner.points.min>=33 4N Quantitative: invites 6NT shows points+partner.points.min>=31 when quant_4nt 3N Game: no extras shows points+partner.points.min<=30 after 1M (P) 2x (P) 2M (P) 2N (P) when x is not M, lawrence21 3M Six or more {M}, no extras shows M>=6, points+partner.points.min<=30 after 1m (P) 1y (P) 3m (P) 4m (P) 5{m} Accepts: a maximum, 17+ shows hcp>=17 when !two_bare_suits P Declines: minimum, or two bare side suits after 1m (P) 1M (P) 3m (P) 3M (P) 4{M} Three-card support shows M>=3 3N No three-card support shows M<=2 after 1M (P) 2x (P) when x is not M, !weak_js | !partner.jumped 2N Waiting: 5+ {M} shows M>=5 when bergen21 2M Rebids {M}: 6+, any strength shows M>=6, x<=2 | x is C | x is D when bergen21 3M Jump rebid: 6+ {M}, 16-18 shows M>=6, suit_points=16..18 when bergen21 2M Rebids {M}: 5+, any strength shows M>=5 when lawrence21 2N Balanced, the unbid suits stopped shows balanced, hcp<=17, x<=2 | x is C | x is D, stop(C) | x is C, stop(D) | x is D, stop(H) | x is H | M is H, stop(S) | x is S | M is S when lawrence21 2M Rebids {M}: exactly five shows M=5 when schuler21 2N Schuler shift: six or more {M} shows M>=6 when schuler21 2M Rebids {M}: 6+, minimum shows M>=6, suit_points<=15 when !(gf21, we.gf) 2M Rebids {M}: 6+, minimum shows M>=5, suit_points<=18 when !(gf21, we.gf) 3M Jump rebid: 6+ {M}, 16-18 shows M>=6, suit_points=16..18 when !bergen21 3x Raise: 4+ {x} shows x>=4 2N 15-17 HCP, balanced shows balanced, hcp=15..17 when !(gf21, we.gf) 3N 18-19 HCP, balanced shows balanced, hcp=18..19 after 1S (P) 2C (P) 2D 4+ diamonds shows D>=4 2H 4+ hearts shows H>=4 after 1S (P) 2D (P) 2H 4+ hearts shows H>=4 3C 4+ clubs, extras shows C>=4, suit_points>=16 when !bergen21 3C 4+ clubs, no extras promised shows C>=4 when bergen21 after 1S (P) 2H (P) 3H Raise: 3+ hearts shows H>=3 4H Game raise: 3+ hearts, 14-17 shows H>=3, suit_points=14..17 3C 4+ clubs, extras shows C>=4, suit_points>=16 when !bergen21 3D 4+ diamonds, extras shows D>=4, suit_points>=16 when !bergen21 3C 4+ clubs, no extras promised shows C>=4 when bergen21 3D 4+ diamonds, no extras promised shows D>=4 when bergen21 after 1H (P) 2C (P) 2D 4+ diamonds shows D>=4 2S Reverse: 4+ spades, longer hearts, 17+ shows S>=4, H>S, suit_points>=17 when !bergen21 2S 4+ spades, no extras promised shows S>=4 when bergen21 after 1H (P) 2D (P) 2S Reverse: 4+ spades, longer hearts, 17+ shows S>=4, H>S, suit_points>=17 when !bergen21 2S 4+ spades, no extras promised shows S>=4 when bergen21 3C 4+ clubs, extras shows C>=4, suit_points>=16 when !bergen21 3C 4+ clubs, no extras promised shows C>=4 when bergen21 after 1D (P) 2C (P) 2D Rebids diamonds: minimum shows D>=5, suit_points<=15 3D Jump rebid: 6+ diamonds, 16-18 shows D>=6, suit_points=16..18 2D Rebids diamonds: 5+ shows D>=5, suit_points<=18 3C Raise: 4+ clubs shows C>=4 2H 4+ hearts shows H>=4 2S 4+ spades shows S>=4 2N 12-14 HCP, balanced shows balanced, hcp=12..14 3N 18-19 HCP, balanced shows balanced, hcp=18..19 after 1x (P) 1N (P) 2z (P) 3x (P) when z is not x 4x Game in the fit: 19+ shows suit_points>=19 when x is H | x is S 5x Game in {x}: 19+ with six shows x>=6, suit_points>=20 when x is C | x is D 3N Game in notrump: 19+ shows hcp>=19 when x is C | x is D P Minimum: to play shows suit_points<=19 after 1x (P) 1y (P) 2z (P) 2N (P) when z is not x, z is not y, partner.points<=10, shown.suit_points>=17 3N Game: 16+ shows hcp>=16 after 1x (P) 3y (P) when y is not x, we.trump is none, !weak_js3 P Minimum, no fit shows hcp<=13 3N Accepts: 14+, to play notrump shows hcp>=14, y<=2 | y is C | y is D 4y Accepts in the fit: 14+ shows y>=2, suit_points>=14 when y is H | y is S 4x Accepts in {x}: seven, or six strong shows x>=7 | (x>=6, top5(x)>=4), hcp>=14, y<=1 | y is C | y is D when x is H | x is S after 1x (P) 1y (P) 1z (P) 1M (P) when !tw(x) 2M Raise: 4+ {M}, minimum shows M>=4, tp(M)<=15 3M Jump raise: 4+ {M}, 16-18 shows M>=4, tp(M)=16..18 4M Game raise: 4+ {M}, 19+ shows M>=4, tp(M)>=19 1N Minimum, no fit for {M} shows M<=3, hcp<=15 2N 16-18, no fit for {M} shows M<=3, hcp=16..18 2x Six or more {x} shows x>=6, suit_points<=15 after (any auction) when asked signoff, !partner.opened P No further bid 2x Six or more {x}: to play shows x>=6, suit_points<=15 when maybe partner.x<=2 3x Invitation: six or more {x}, 16-18 shows x>=6, suit_points=16..18 3x Invitation: 3+ {x}, 16-18 shows x>=3, suit_points=16..18 when partner.x>=5 2y Preference: three or more {y} shows y>=3 when partner.y>=5 4M Game: 6+ {M}, 19+ shows M>=6, suit_points>=19 4M Game: 3+ {M}, 19+ shows M>=3, suit_points>=19 when partner.M>=4 after (any auction) when asked signoff, partner.opened P No further bid after (any auction) when asked invite(M) 4M Accepts, in the fit shows M>=8-partner.M.min, points>=24-partner.points.min 3N Accepts, no fit shows M<8-partner.M.min, strength>=game 3M Declines, in the fit shows M>=8-partner.M.min, points<=23-partner.points.min P Declines shows strength<=invite, M<8-partner.M.min | points<=23-partner.points.min after (any auction) when asked invite(M), partner.tp(M).min>=10 4M Accepts, in the fit shows M>=8-partner.M.min, tp(M)>=25-partner.tp(M).min P Declines: a minimum shows M>=8-partner.M.min, tp(M)<=24-partner.tp(M).min after (any auction) when answered invite(M), partner.last=3{M} P No further bid after (any auction) when asked invite(m) P Declines: minimum 3N Accepts, in notrump: 14+ shows hcp>=14, balanced | semibalanced 5m Accepts in {m}: 18+ with the fit shows hcp>=18, m>=5 after 1x (*) 1z (*) when they.bid, z is not x cheapest(z) Raise: four or more {z}, minimum shows z>=4, tp(z)<=15 when partner.z>=4 jump(z) Jump raise: four or more {z}, 16-18 shows z>=4, tp(z)=16..18 when partner.z>=4, z is H | z is S jump(z) Jump raise: four or more {z}, 16+ shows z>=4, tp(z)>=16 when partner.z>=4, z is C | z is D 4{z} Game raise: four or more {z}, 19+ shows z>=4, tp(z)>=19 when partner.z>=4, z is H | z is S cheapest(x) Rebids {x}: six or more, minimum shows x>=6, suit_points<=15 when x is H | x is S cheapest(x) Rebids {x}: 5+, minimum shows x>=5, suit_points<=15 when x is C | x is D, x>=6 jump(x) Jump rebid: six or more {x}, 16-18 shows x>=6, suit_points=16..18 4{x} Game: six or more {x}, 19+ shows x>=6, suit_points>=19 when x is H | x is S P No further bid after 1x (*) 1z (P) when they.bid, z is not x 1H Four or more hearts, up to 18 shows H>=4, suit_points<=18 when x is not H, z is not H, maybe lho.H<=4, maybe rho.H<=4 1S Four or more spades, up to 18 shows S>=4, suit_points<=18 when x is not S, z is not S, maybe lho.S<=4, maybe rho.S<=4 cheapest(C) Four or more clubs, up to 18 shows C>=4, suit_points<=18 when x is not C, z is not C, maybe lho.C<=4, maybe rho.C<=4 cheapest(D) Four or more diamonds, up to 18 shows D>=4, suit_points<=18 when x is H | x is S, z is not D, maybe lho.D<=4, maybe rho.D<=4 2H Reverse: four or more hearts, longer {x}, 17+ shows H>=4, x>H, suit_points>=17 when x is C | x is D, z is not H, maybe lho.H<=4, maybe rho.H<=4 2S Reverse: four or more spades, longer {x}, 17+ shows S>=4, x>S, suit_points>=17 when x is not S, z is not S, maybe lho.S<=4, maybe rho.S<=4 2D Reverse: four or more diamonds, longer clubs, 17+ shows D>=4, C>D, suit_points>=17 when x is C, z is not D, maybe lho.D<=4, maybe rho.D<=4 cheapest(x) Rebids {x}: 5+ shows x>=5, suit_points<=18 cheapest(x) Rebids {x} after 1x (1y) 1z (P) | 1x (2y) 1z (P) when y is not x, z is not x, z is not y cheapest(N) 12-14 balanced with a stopper in {y} shows balanced | shape 5-4-2-2, hcp=12..14, z<=3 when stop(y) jump(N) 18-19 balanced with a stopper in {y} shows balanced, hcp=18..19, z<=3 when nt_jump_to_game, stop(y) 3N Game: 19+ with a stopper in {y} shows hcp>=19, stop(y), z<=3 cheapest(y) Cue bid: 19+, forcing to game [alert] [artificial] shows suit_points>=19 after 1x (X) 1z (P) when z is not x cheapest(N) 12-14 balanced shows balanced | shape 5-4-2-2, hcp=12..14, z<=3 jump(N) 18-19 balanced shows balanced, hcp=18..19, z<=3 when nt_jump_to_game after 1x (X) 1z (1y) when z is not x, y is not x, y is not z X Strong hand: 18+ shows hcp>=18 when !support_x | z is C | z is D | !((support_through is none, rho.last<=2{z}) | rho.last<=support_through) after 1x (X) 1z (1y) X (P) * (P) when z is not x, y is not x, y is not z, !answered support cheapest(N) 18-19 balanced with a stopper in {y} shows balanced, hcp=18..19, stop(y) 3N 20+ balanced with a stopper in {y} shows balanced, hcp>=20, stop(y) cheapest(x) Six or more {x}, the strong hand shows x>=6 P No further bid after 1x (*) 2z (*) | 1x (*) 3z (*) | 1x (*) 4z (*) when they.bid, z is not x, partner.named(z) cheapest(z) Raise: three or more {z} shows z>=3, tp(z)<=17 when partner.z>=5 cheapest(z) Raise: four or more {z}, minimum shows z>=4, tp(z)<=17 when partner.z>=4, maybe partner.z<=4 4{z} Game raise: 18+ with the fit shows z>=3, tp(z)>=18 when partner.z>=4, z is H | z is S cheapest(x) Rebids {x}: six or more, minimum shows x>=6, suit_points<=15 when x is H | x is S cheapest(x) Rebids {x}: 5+, minimum shows x>=5, suit_points<=15 when x is C | x is D, x>=6 jump(x) Jump rebid: six or more {x}, 16-18 shows x>=6, suit_points=16..18 4{x} Game: six or more {x}, 19+ shows x>=6, suit_points>=19 when x is H | x is S P Minimum, no fit shows suit_points<=15 cheapest(x) Rebids {x}: 5+ shows x>=5 cheapest(S) Four or more spades shows S>=4, suit_points<=18 when x is not S, z is not S, maybe lho.S<=4, maybe rho.S<=4, we.forcing=round, partner.z>=5 cheapest(H) Four or more hearts shows H>=4, suit_points<=18 when x is not H, z is not H, maybe lho.H<=4, maybe rho.H<=4, we.forcing=round, partner.z>=5 cheapest(z) Raise with extras: 18+, forcing to game shows z>=3, tp(z)>=18 when partner.z>=5, new_suit_forcing cheapest(x) Rebids {x} when we.forcing=round, partner.z>=5 P No further bid after 1x (1y) 2z (P) | 1x (2y) 2z (P) | 1x (2y) 3z (P) | 1x (3y) 3z (P) when y is not x, z is not x, z is not y cheapest(N) Balanced with a stopper in {y}, minimum shows balanced | shape 5-4-2-2, hcp<=15, z<=3 when stop(y) jump(N) 16-18 balanced with a stopper in {y} shows balanced, hcp=16..18, z<=3 when nt_jump_to_game, stop(y) 3N Game: 17+ with a stopper in {y} shows hcp>=17, stop(y) cheapest(y) Cue bid: 18+, forcing to game [alert] [artificial] shows suit_points>=18 after 1x (X) 2z (P) when z is not x cheapest(N) Balanced, minimum shows balanced | shape 5-4-2-2, hcp<=15, z<=3 after 1x (*) 2x (*) when they.bid P Minimum: no game shows tp(x)<=16 cheapest(x) Invitation: 17-18 with the fit shows tp(x)=17..18 4{x} Game: 19+ with the fit shows tp(x)>=19 when x is H | x is S 3N Game: 19+, balanced shows balanced, hcp>=19, stop(they.strain) when x is C | x is D, they.strain is not none, they.strain is not N 3N Game: 19+, balanced shows balanced, hcp>=19 when x is C | x is D, they.strain is none | they.strain is N P No further bid after 1x (*) 3x (*) when they.bid 4{x} Game: 19+ shows tp(x)>=19 when x is H | x is S 5{x} Game: 19+ shows tp(x)>=19 when x is C | x is D P No further bid after 1x (2y) 3x (P) when y is not x, !partner.jumped 3N Game: 16+ with a stopper in {y} shows hcp>=16, stop(y) when x is C | x is D 4{x} Game: 17+ support points shows tp(x)>=17 when x is H | x is S 5{x} Game in the minor: 18+ shows hcp>=18 when x is C | x is D after 1x (*) 4x (*) when they.bid, x is C | x is D 5{x} Game: 16+ with the fit shows hcp>=16 P No game shows hcp<=15 after 1x (*) 1N (*) when they.bid P Minimum shows suit_points<=15 cheapest(x) Rebids {x}: six or more, minimum shows x>=6, suit_points<=15 jump(x) Jump rebid: six or more {x}, 16-18 shows x>=6, suit_points=16..18 jump(N) 18-19 balanced shows balanced, hcp=18..19 when nt_jump_to_game 4{x} Game: six or more {x}, 19+ shows x>=6, suit_points>=19 when x is H | x is S cheapest(N) 16-17: invites 3NT shows hcp=16..17 when !lho.last=X jump(N) Game: 18+ shows hcp>=18 when nt_jump_to_game, !lho.last=X P No further bid after 1x (X) XX (*) cheapest(x) Rebids {x}: six or more shows x>=6, suit_points<=18 cheapest(S) Five or more spades shows S>=5, suit_points<=18 when x is not S, maybe lho.S<=4, maybe rho.S<=4 cheapest(H) Five or more hearts shows H>=5, S<=4, suit_points<=18 when x is not H, maybe lho.H<=4, maybe rho.H<=4 cheapest(D) Five or more diamonds shows D>=5, S<=4, H<=4, suit_points<=18 when x is not D, maybe lho.D<=4, maybe rho.D<=4 cheapest(C) Five or more clubs shows C>=5, S<=4, H<=4, suit_points<=18 when x is not C, maybe lho.C<=4, maybe rho.C<=4 P No further bid after 1x (*) P (*) when they.bid, maybe lho.hcp<=14, maybe rho.hcp<=14 cheapest(x) Rebids {x}: six or more, extras shows x>=6, suit_points=13..18 after 1x (*) P (*) when they.bid P No further bid after 1x (1y) P (P) | 1x (2y) P (P) | 1x (3y) P (P) when y is not x X Reopening double: short in {y}, support for the other suits shows y<=2, hcp>=12, (S>=3 | x is S | y is S, H>=3 | x is H | y is H, D>=3 | x is D | y is D, C>=3 | x is C | y is C) | hcp>=16 cheapest(S) Five or more spades, 14+ shows S>=5, suit_points>=14 when x is not S, y is not S cheapest(H) Five or more hearts, 14+ shows H>=5, S<=4, suit_points>=14 when x is not H, y is not H cheapest(D) Five or more diamonds, 14+ shows D>=5, S<=4, H<=4, suit_points>=14 when x is not D, y is not D cheapest(C) Five or more clubs, 14+ shows C>=5, S<=4, H<=4, D<=4, suit_points>=14 when x is not C, y is not C cheapest(N) 18-19 balanced with a stopper in {y} shows balanced, hcp=18..19 when stop(y) after (any auction) when asked nt_invite, !partner.opened 3S Six or more spades: not a maximum shows S>=6, strength<=invite 4S Six or more spades: accepts shows S>=6, strength>=game 3H Six or more hearts: not a maximum shows H>=6, S<=3, strength<=invite 4H Six or more hearts: accepts shows H>=6, S<=3, strength>=game == responder-rebids: Responder's second call file: conventions/base/responder-rebids.bid needs: rebids skills: partnership_bidding/responders_rebid, bidding_conventions/fourth_suit_forcing after 1x (P) 1y (P) 1N (P) when !tw(x) P Weak: no game shows points<=10 2y Weak: 6+ {y} shows y>=6, points<=10 when y is H | y is S 3y Invitational: 6+ {y}, 11-12 shows y>=6, points=11..12 when !(twoway_sw | xyz) 2N Invitational: 11-12 shows points=11..12, y<=5 when !(twoway_sw | xyz) 3N Game: 13+ shows points>=13, y<=5 | y is C | y is D 2x Weak: 5+ {x} shows x>=5, points<=10 when x is H | x is S | (x is C, !checkback, !roudi, !(twoway_sw | xyz)) | (x is D, !(twoway_sw | xyz)) after 1x (P) 1M (P) 1N (P) when !tw(x) 4M Game: 6+ {M} shows M>=6, points>=13 after 1M (P) 1y (P) 1N (P) 3M Invitational: 3 {M}, 11-12 support points shows M=3, tp(M)=11..12 4M Game in opener's major: 3+ {M}, 13+ support points shows M>=3, tp(M)>=13 after 1C (P) 1D (P) 1N (P) when !tw(C) 2H Responder's reverse: 4+ hearts, 5+ diamonds, game forcing shows H>=4, D>=5, points>=13 2S Responder's reverse: 4+ spades, 5+ diamonds, game forcing shows S>=4, D>=5, points>=13 after 1C (P) 1H (P) 1N (P) when !tw(C) 2D 4+ diamonds, 5+ hearts, not forcing shows D>=4, H>=5, points<=12 when !nmf, !(twoway_sw | xyz) 2S Responder's reverse: 4+ spades, 5+ hearts, game forcing shows S>=4, H>=5, points>=13 after 1C (P) 1S (P) 1N (P) when !tw(C) 3H Four hearts, five spades, game forcing shows H>=4, S>=5, points>=13 2D 4+ diamonds, 5+ spades, not forcing shows D>=4, S>=5, points<=12 when !nmf, !(twoway_sw | xyz) 2H 4+ hearts, 5+ spades, not forcing shows H>=4, S>=5, points<=12 after 1D (P) 1H (P) 1N (P) 2C 4+ clubs, 5+ hearts, not forcing shows C>=4, H>=5, points<=12 when !nmf, !checkback, !roudi, !(twoway_sw | xyz) 2S Responder's reverse: 4+ spades, 5+ hearts, game forcing shows S>=4, H>=5, points>=13 after 1D (P) 1S (P) 1N (P) 3H Four hearts, five spades, game forcing shows H>=4, S>=5, points>=13 2C 4+ clubs, 5+ spades, not forcing shows C>=4, S>=5, points<=12 when !nmf, !checkback, !roudi, !(twoway_sw | xyz) 2H 4+ hearts, 5+ spades, not forcing shows H>=4, S>=5, points<=12 after 1H (P) 1S (P) 1N (P) 2C 4+ clubs, 5+ spades, not forcing shows C>=4, S>=5, points<=12 when !checkback, !(twoway_sw | xyz) 2D 4+ diamonds, 5+ spades, not forcing shows D>=4, S>=5, points<=12 when !(twoway_sw | xyz) after 1x (P) 1y (P) 2x (P) when !tw(x) P Weak: no game shows points<=10 2y Weak: 6+ {y} shows y>=6, points<=10 3y Invitational: 6+ {y}, 11-12 shows y>=6, points=11..12 3x Raise: 2+ {x}, 10-12 shows x>=2, points=10..12 3x Raise: 3+ {x}, 7-9 shows x>=3, points=7..9 when style is bba, x is C | x is D 2N Invitational: 11-12 shows points=11..12, x<=1, y<=5 3N Game: 13+ shows points>=13, x<=1 | x is C | x is D after 1M (P) 1y (P) 2M (P) 4M Game: 2+ {M}, 13+ shows M>=2, points>=13 after 1x (P) 1y (P) 2y (P) when !tw(x) P Weak: no game shows tp(y)<=10 3y Invitational: 11-12 shows tp(y)=11..12 after 1x (P) 1M (P) 2M (P) when !tw(x) 4M Game: 13+ shows tp(M)>=13 after 1C (P) 1D (P) 2D (P) when !tw(C) 3N Game: 13+ shows points>=13 after 1C (P) 1D (P) 1H (P) when !tw(C) 1S 4+ spades shows S>=4, H<=3 after 1x (P) 1y (P) 1z (P) when !tw(x) 1N 6-10, no fit shows points<=10, z<=3 2x Preference: 3+ {x}, weak shows x>=3, points<=10, z<=3 when !xyz 2z Raise: 4+ {z}, weak shows z>=4, points<=10 3z Invitational raise: 4+ {z}, 11-12 shows z>=4, points=11..12 2y Weak: 6+ {y} shows y>=6, points<=10 when !xyz | y is H | y is S 3y Invitational: 6+ {y}, 11-12 shows y>=6, points=11..12 when !xyz 2N Invitational: 11-12 shows points=11..12, z<=3 when !xyz 3N Game: 13+ shows points>=13, z<=3 after 1x (P) 1y (P) 1M (P) when !tw(x) 4M Game raise: 4+ {M}, 13+ shows M>=4, points>=13 after 1x (P) 1y (P) 1z (P) 1M (P) 1N (P) when !tw(x) 2N Invitational: 11-12 shows points=11..12 3N Game: 13+ shows points>=13 after 1x (P) 1y (P) 1z (P) 1M (P) 2M (P) when !tw(x) 3M Invitational: 11-12 shows tp(M)=11..12 4M Game: 13+ shows tp(M)>=13 after 1x (P) 1y (P) 1z (P) 1M (P) 2x (P) when !tw(x) 3N Game: 13+ shows points>=13 after 1D (P) 1H (P) 1S (P) 2C 5+ clubs, 8-10 shows C>=5, points=8..10, S<=3 when !fsf_on, !xyz after 1x (P) 1y (P) 2z (P) when z is not x, z is not y, !tw(x) P Weak: to play shows points<=10, z>=4 | z>x 2x Preference: weak shows x>=2, points<=10, x>=z | (z<=3, x is H) | (z<=3, x is S) 2y Weak: 6+ {y} shows y>=6, points<=10 3z Invitational raise: 4+ {z} shows z>=4, points=11..12 3x Invitational: 3+ {x} shows x>=3, points=11..12 2N Invitational: 11-12 shows points=11..12, z<=3 when !we.forcing=round 3N Game: 13+ shows points>=13, z<=3 | z is C | z is D 3N Game: 11+ shows points>=11, z<=3 | z is C | z is D when we.forcing=round 2N Minimum, no fit shows points<=10 when we.forcing=round after 1M (P) 1y (P) 2z (P) when z is not M, z is not y 4M Game in opener's major: 3+ {M}, 13+ support points shows M>=3, tp(M)>=13 after 1x (P) 1y (P) 3x (P) when !tw(x) P Weak: no game shows points<=8 3N Game: 9+ shows points>=9, x<=1 | x is C | x is D after 1M (P) 1y (P) 3M (P) 4M Game: 2+ {M}, 8+ shows M>=2, points>=8 after 1x (P) 1y (P) 3y (P) when !tw(x) P Weak: no game shows points<=8 3N Game: 8+ shows points>=8 when y is not H, y is not S after 1x (P) 1M (P) 3M (P) when !tw(x) 4M Game: 9+ shows points>=9 after 1m (P) 1y (P) 3m (P) when !tw(m) 4{m} Invitational raise: 3+ {m}, 8 shows m>=3, points=8 after 1m (P) 1M (P) 3m (P) when !tw(m) 3{M} Five {M}, forcing: choose 3NT or 4{M} shows M=5, points>=9 4{M} Game: six or more {M}, 9+ shows M>=6, points>=9 after 1x (P) 1y (P) 2N (P) when !tw(x) P Weak: no game shows points<=6 3N Game: 7+ shows points>=7, y<=5 | y is C | y is D, hcp+partner.hcp.min<=31 after 1x (P) 1M (P) 2N (P) when !tw(x) 4M Game: 6+ {M} shows M>=6, points>=7 after 1M (P) 1y (P) 2N (P) 4M Game in opener's major: 3+ {M} shows M>=3, tp(M)>=7 after 1x (P) 1N (P) 2z (P) when z is not x P To play in {z} shows z>=4 | z>x 3m To play: six or more {m} shows m>=6, x<=1, z<=2 when m is not x, m is not z 2x Preference: 2+ {x} shows x>=2, x>=z | (z<=3, x is H) | (z<=3, x is S) 3z Raise: 4+ {z}, 9-10 shows z>=4, points=9..10 3z Raise: 4+ {z}, 11+ points shows z>=4, points>=11 when z is C | z is D, x is not H | !imp2s after 1S (P) 1N (P) 2m (P) 2H To play: six or more hearts shows H>=6, S<=1, hcp<=10 after 1M (P) 1N (P) 2z (P) when z is not M, shown.hcp.max>=11, !we.forcing=round 2N Invitational: 11-12, no fit shows hcp=11..12, M<=2, z<=3 3M Limit raise: three-card support, 10-12 shows M=3, tp(M)=10..12 3z Raise: 4+ {z}, 11-12 HCP shows z>=4, hcp=11..12 when z is C | z is D after 1M (P) 1N (P) 2M (P) when shown.hcp.max>=11 2N Invitational: 11-12 shows hcp=11..12, M<=2 3M Invitational: two or three {M}, 11-12 shows M>=2, hcp=11..12 after 1x (P) 1N (P) 2x (P) P No game shows hcp<=10 3x Raise: 3+ {x}, invitational shows x>=3, points>=10 when x is C | x is D 3x Invitational raise: 2+ {x}, 8-10 shows x>=2, hcp>=8 when x is H | x is S, shown.hcp.max<=10 after 1x (P) 1N (P) 3x (P) P No game shows points<=8 3N Game, no fit shows points>=9, x<=1 | x is C | x is D after 1M (P) 1N (P) 3M (P) 4M Game: 2+ {M}, 8+ shows M>=2, points>=8 after 1x (P) 1N (P) 2N (P) P No game shows points<=6 3N Game: 7+ shows points>=7 after 1y (P) 2x (P) 2z (P) when x is not y, !(weak_js, two_level_jump(x,y)) 2N Invitational, no fit: 11-12 shows points=11..12, y<=2 | y is C | y is D when !we.gf 3N Game, no fit shows points>=13, y+partner.y.min<=7 | y is C | y is D when !we.gf 3N Game, no fit: 13-15 shows points=13..15, y+partner.y.min<=7 | y is C | y is D when we.gf 2N Game forcing, no fit: 16+ shows points>=16, y+partner.y.min<=7 | y is C | y is D, z<=3 when we.gf 3x Invitational: 6+ {x}, 11-12 shows x>=6, suit_points=11..12, y<=2 | y is C | y is D when !we.gf 2y Preference: 2+ {y} shows y>=2, suit_points<=12 when !we.gf P Minimum: no game shows suit_points<=12 3x Six or more {x}, game forcing shows x>=6 when we.gf 2y Preference: 2+ {y}, game forcing shows y>=2 when we.gf after 1M (P) 2x (P) 2z (P) when x is not M, !(weak_js, two_level_jump(x,M)) 4M Game with support: no slam interest shows tp(M)=11..15, M>=3 | (M>=2, partner.M>=6) 3M Support for {M}, slam interest: forcing shows tp(M)>=16, M>=3 | (M>=2, partner.M>=6) after 1y (P) 2x (P) 2z (P) when x is not y, z is not y, z is H | z is S, !(weak_js, two_level_jump(x,y)) 4z Raise: 4+ {z}, no slam interest shows z>=4, points=11..14 3z Raise: 4+ {z}, slam interest, forcing shows z>=4, points>=15 after 1y (P) 2x (P) 3x (P) when x is not y, !(weak_js, two_level_jump(x,y)) 4x Game in the fit shows suit_points>=11 when x is H | x is S 3N Game shows points>=12, y<=2 | y is C | y is D when x is H | x is S | (x is C | y is C | stop(C) | partner.cued(C) | partner.C.min>=4 | shown.C.min>=4, x is D | y is D | stop(D) | partner.cued(D) | partner.D.min>=4 | shown.D.min>=4, x is H | y is H | stop(H) | partner.cued(H) | partner.H.min>=4 | shown.H.min>=4, x is S | y is S | stop(S) | partner.cued(S) | partner.S.min>=4 | shown.S.min>=4) P Minimum: no game shows suit_points<=12 after 1y (P) 2x (P) 3x (P) when x is C | x is D, x is not y, !(weak_js, two_level_jump(x,y)) cheapest(C) Stopper in ♣, looking for 3NT when x is not C, y is not C, cheapest_rank(C)<19, points>=12, stop(C), !(x is C | y is C | stop(C) | partner.cued(C) | partner.C.min>=4 | shown.C.min>=4, x is D | y is D | stop(D) | partner.cued(D) | partner.D.min>=4 | shown.D.min>=4, x is H | y is H | stop(H) | partner.cued(H) | partner.H.min>=4 | shown.H.min>=4, x is S | y is S | stop(S) | partner.cued(S) | partner.S.min>=4 | shown.S.min>=4) cheapest(D) Stopper in ♦, looking for 3NT when x is not D, y is not D, cheapest_rank(D)<19, points>=12, stop(D), !(x is C | y is C | stop(C) | partner.cued(C) | partner.C.min>=4 | shown.C.min>=4, x is D | y is D | stop(D) | partner.cued(D) | partner.D.min>=4 | shown.D.min>=4, x is H | y is H | stop(H) | partner.cued(H) | partner.H.min>=4 | shown.H.min>=4, x is S | y is S | stop(S) | partner.cued(S) | partner.S.min>=4 | shown.S.min>=4) cheapest(H) Stopper in ♥, looking for 3NT when x is not H, y is not H, cheapest_rank(H)<19, points>=12, stop(H), !(x is C | y is C | stop(C) | partner.cued(C) | partner.C.min>=4 | shown.C.min>=4, x is D | y is D | stop(D) | partner.cued(D) | partner.D.min>=4 | shown.D.min>=4, x is H | y is H | stop(H) | partner.cued(H) | partner.H.min>=4 | shown.H.min>=4, x is S | y is S | stop(S) | partner.cued(S) | partner.S.min>=4 | shown.S.min>=4) cheapest(S) Stopper in ♠, looking for 3NT when x is not S, y is not S, cheapest_rank(S)<19, points>=12, stop(S), !(x is C | y is C | stop(C) | partner.cued(C) | partner.C.min>=4 | shown.C.min>=4, x is D | y is D | stop(D) | partner.cued(D) | partner.D.min>=4 | shown.D.min>=4, x is H | y is H | stop(H) | partner.cued(H) | partner.H.min>=4 | shown.H.min>=4, x is S | y is S | stop(S) | partner.cued(S) | partner.S.min>=4 | shown.S.min>=4) cheapest(y) No stopper to show below 3NT when cheapest_rank(y)<19, points>=12, !(x is C | y is C | stop(C) | partner.cued(C) | partner.C.min>=4 | shown.C.min>=4, x is D | y is D | stop(D) | partner.cued(D) | partner.D.min>=4 | shown.D.min>=4, x is H | y is H | stop(H) | partner.cued(H) | partner.H.min>=4 | shown.H.min>=4, x is S | y is S | stop(S) | partner.cued(S) | partner.S.min>=4 | shown.S.min>=4) 5x Game in the minor: a suit unstopped shows points>=12 when !(x is C | y is C | stop(C) | partner.cued(C) | partner.C.min>=4 | shown.C.min>=4, x is D | y is D | stop(D) | partner.cued(D) | partner.D.min>=4 | shown.D.min>=4, x is H | y is H | stop(H) | partner.cued(H) | partner.H.min>=4 | shown.H.min>=4, x is S | y is S | stop(S) | partner.cued(S) | partner.S.min>=4 | shown.S.min>=4) after 1M (P) 2x (P) 3x (P) when x is not M, !(weak_js, two_level_jump(x,M)) 4M Game with support shows tp(M)>=11, M>=3 after 1y (P) 2x (P) 3z (P) when x is not y, z is not y, z is not x, !(weak_js, two_level_jump(x,y)) 3N Game, no fit shows points>=10, y<=2 | y is C | y is D after 1M (P) 2x (P) 3z (P) when x is not M, z is not M, z is not x, !(weak_js, two_level_jump(x,M)) 3M Support, 13+: forcing, room for slam shows points>=13, M>=3 4M Game with support: a minimum shows tp(M)>=11, points<=12, M>=3 3x Six or more {x}: forcing shows x>=6, M<=2 when cheapest_rank(x)<19 after 1y (P) 2x (P) 2N (P) when x is not y, !(weak_js, two_level_jump(x,y)) 3N Game: 11+ shows points>=11 P Minimum: no game after 1y (P) 2x (P) 3y (P) when x is not y, !(weak_js, two_level_jump(x,y)) 3N Game, no fit shows points>=11, y<=1 | y is C | y is D P Minimum: no game after 1M (P) 3M (P) 3N (P) 4M Prefers the major: four trumps shows M>=4 after 1M (P) 2M (P) 3M (P) 4M Accepts: top of the raise shows tp(M)>=9 when style is not bba P Declines shows tp(M)<=8 when style is not bba 4M Accepts: 10 HCP, or four trumps and a singleton shows hcp>=10 | (M>=4, shortest<=1) when style is bba P Declines when style is bba after 1M (P) 2x (P) 3M (P) when x is not M, !(weak_js, two_level_jump(x,M)) 4M Game shows points>=11 after 1x (P) 1N (P) 2y (P) when y is not x, we.forcing=round 3N Game: a maximum for the 1NT response shows hcp>=9 3{y} Raise: four or more {y} shows y>=4 3{x} Preference to {x} shows x>=2 after 1x (*) X (*) 1z (*) | 1x (*) X (*) 2z (*) | 1x (*) X (*) 3z (*) when they.bid P Minimum: no further bid shows hcp+length_points<=10 cheapest(z) Raise: an eight-card fit in {z}, 11-12 shows z>=8-partner.z.min, hcp+length_points=11..12 when partner.z>=3 4{z} Game in {z}: 13+ with an eight-card fit shows z>=8-partner.z.min, hcp+length_points>=13 when partner.z>=3, z is H | z is S 4{z} Game in {z}: 8+, an eight-card fit shows z>=8-partner.z.min, hcp+length_points>=8 when partner.z>=3, z is H | z is S, partner.jumped cheapest(N) Invitational: 11-12 balanced, their suit stopped shows balanced, hcp+length_points=11..12, stop(they.strain) when they.strain is not none, they.strain is not N cheapest(N) Invitational: 11-12 balanced shows balanced, hcp+length_points=11..12 when they.strain is none | they.strain is N 3N Game: 13+ balanced, their suit stopped shows balanced, hcp+length_points>=13, stop(they.strain) when they.strain is not none, they.strain is not N 3N Game: 13+ balanced shows balanced, hcp+length_points>=13 when they.strain is none | they.strain is N 3N Game: 13+, no fit, their suit stopped shows hcp+length_points>=13, z<=7-partner.z.min, stop(they.strain) when they.strain is not none, they.strain is not N P No further bid after 1x (1y) X (P) 1z (P) | 1x (1y) X (P) 2z (P) | 1x (1y) X (P) 3z (P) | 1x (2y) X (P) 2z (P) | 1x (2y) X (P) 3z (P) when y is not x, y is not z 3N Game: 13+, a stopper in {y} shows hcp+length_points>=13, stop(y) when partner.z<=3 | z is C | z is D cheapest(y) Cue bid: 13+, no stopper in {y}, forcing to game [alert] [artificial] shows hcp+length_points>=13 after 1x (X) XX (1y) P (P) | 1x (X) XX (2y) P (P) | 1x (X) XX (3y) P (P) when y is not x X Penalty: four good {y} behind the bidder shows y>=4 when quality(y)>=good | top5(y)>=3 cheapest(x) Back to partner's suit: three or more, 10-11 shows x>=3, hcp<=11 3N Game: 12+ with a stopper in {y} shows hcp>=12, stop(y) 4{x} Game: 12+ with three-card support shows x>=3, hcp>=12 when x is H | x is S cheapest(y) Cue bid: 12+, no stopper, forcing to game [alert] [artificial] shows hcp>=12 when !stop(y), cheapest_rank(y)<=18 cheapest(S) Five or more spades shows S>=5 when x is not S, y is not S cheapest(H) Five or more hearts shows H>=5, S<=4 when x is not H, y is not H P No further bid after 1x (1y) P (P) X (P) | 1x (2y) P (P) X (P) | 1x (3y) P (P) X (P) when y is not x P Passes the reopening double: four or more {y} shows y>=4, y>=5 | quality(y)>=good | top5(y)>=3 | hcp>=8 cheapest(S) Four or more spades for the reopening double shows S>=4, S>=H, S>=D, S>=C when x is not S, y is not S cheapest(H) Four or more hearts for the reopening double shows H>=4, H>S, H>=D, H>=C when x is not H, y is not H cheapest(D) Four or more diamonds for the reopening double shows D>=4, D>S, D>H, D>=C when x is not D, y is not D cheapest(C) Four or more clubs for the reopening double shows C>=4, C>S, C>H, C>D when x is not C, y is not C cheapest(x) Back to partner's suit shows x>=3 cheapest(N) Balanced with a stopper in {y} shows balanced when stop(y) P Passes the double after 1x (*) P (*) P (P) when they.bid P No further bid after 1x (*) 1y (*) 1z (*) when they.bid, y is not x, z is not x, z is not y cheapest(N) 6-10, no fit shows points<=10, z<=3 cheapest(x) Preference: three or more {x}, weak shows x>=3, points<=10, z<=3 cheapest(z) Raise: four or more {z}, weak shows z>=4, points<=10 jump(z) Invitational raise: four or more {z}, 11-12 shows z>=4, points=11..12 cheapest(y) Weak: six or more {y} shows y>=6, points<=10 jump(y) Invitational: six or more {y}, 11-12 shows y>=6, points=11..12 jump(N) Game: 13+ shows points>=13, z<=3 when nt_jump_to_game 4{z} Game raise: four or more {z}, 13+ shows z>=4, points>=13 when z is H | z is S P No further bid after 1x (*) 1y (*) 2z (*) when they.bid, y is not x, z is not x, z is not y cheapest(x) Preference: two or more {x} shows x>=2, points<=12 cheapest(z) Raise: four or more {z} shows z>=4, points>=10 cheapest(y) Weak: six or more {y} shows y>=6, points<=10 cheapest(N) No fit shows points<=12 jump(N) Game: 13+ shows points>=13, z<=3 when nt_jump_to_game P Weak: to play shows points<=10 P No further bid after 1x (*) 1z (*) P (P) | 1x (*) 2z (*) P (P) when they.bid, z is not x cheapest(z) Competes: six or more {z} shows z>=6, points>=8 cheapest(x) Competes: three or more {x} shows x>=3, points>=10 when partner.x>=5 P No further bid after 1x (*) X (*) 1N (*) | 1x (*) X (*) 2N (*) when they.bid P Minimum: no game shows points<=10 when !partner.jumped P Minimum: no game shows points<=5 when partner.jumped 3N Game shows points>=6 when partner.jumped cheapest(S) Weak: six or more spades shows S>=6, points<=10 cheapest(H) Weak: six or more hearts shows H>=6, S<=5, points<=10 cheapest(N) Invitational: 11-12 shows points=11..12 when partner.last=1N 3N Game: 13+ shows points>=13 when !partner.jumped P No further bid after 1x (*) X (*) P (P) when they.bid cheapest(S) Competes: five or more spades, 11+ shows S>=5, points>=11 cheapest(H) Competes: five or more hearts, 11+ shows H>=5, S<=4, points>=11 cheapest(x) Preference to partner's suit with 11-12 shows x>=3, points=11..12 P No further bid after 1x (1y) X (1y) P (P) | 1x (1y) X (2y) P (P) | 1x (1y) X (3y) P (P) | 1x (2y) X (3y) P (P) when y is not x 3N Game: 13+ with a stopper in {y} shows points>=13, stop(y) 4{x} Game in partner's major: 13+ with three shows x>=3, points>=13 when x is H | x is S 5{x} Game in partner's minor: 13+ with three shows x>=3, points>=13 when x is C | x is D after 1C (P) 1S (P) 1N (P) 3H (P) | 1D (P) 1S (P) 1N (P) 3H (P) 4H Four hearts shows H>=4 4S Three spades shows S=3, H<=3 3N Neither fit shows S<=2, H<=3 after (any auction) when asked stoppers, trump is C | trump is D 3N Every suit stopped: 3NT when trump is C | stop(C) | partner.cued(C) | me.cued(C) | partner.C.min>=4 | shown.C.min>=4, trump is D | stop(D) | partner.cued(D) | me.cued(D) | partner.D.min>=4 | shown.D.min>=4, trump is H | stop(H) | partner.cued(H) | me.cued(H) | partner.H.min>=4 | shown.H.min>=4, trump is S | stop(S) | partner.cued(S) | me.cued(S) | partner.S.min>=4 | shown.S.min>=4 cheapest(C) Stopper in ♣, looking for 3NT when trump is not C, cheapest_rank(C)<19, stop(C), !partner.cued(C), !me.cued(C), !partner.C.min>=4, !shown.C.min>=4 cheapest(D) Stopper in ♦, looking for 3NT when trump is not D, cheapest_rank(D)<19, stop(D), !partner.cued(D), !me.cued(D), !partner.D.min>=4, !shown.D.min>=4 cheapest(H) Stopper in ♥, looking for 3NT when trump is not H, cheapest_rank(H)<19, stop(H), !partner.cued(H), !me.cued(H), !partner.H.min>=4, !shown.H.min>=4 cheapest(S) Stopper in ♠, looking for 3NT when trump is not S, cheapest_rank(S)<19, stop(S), !partner.cued(S), !me.cued(S), !partner.S.min>=4, !shown.S.min>=4 5{trump} A suit unstopped: game in the minor after 1m (P) 2m (P) 3m (P) when !inverted 3N Accepts: the top of the raise shows hcp>=9 P Declines: 6-8 shows hcp<=8 after 1x (1y) P (P) 1N (P) | 1x (2y) P (P) 2N (P) when y is not x 3N Game: 7+ shows hcp>=7 P No game shows hcp<=6 after 1x (1z) 1y (P) 2x (P) when z is not x, z is not y, y is not x 3x Invitational: 3+ {x}, 11-12 shows x>=3, points=11..12 4x Game: 3+ {x}, 13+ shows x>=3, points>=13 when x is H | x is S 3y Invitational: 6+ {y}, 11-12 shows y>=6, points=11..12 2N Invitational: 11-12, {z} stopped shows points=11..12, stop(z), x<=2 3N Game: 13+, {z} stopped shows points>=13, stop(z), x<=2 | x is C | x is D cheapest(z) Cue bid: 13+, no stopper in {z}, forcing to game [alert] [artificial] shows points>=13 when cheapest_rank(z)<=18 after 1x (1z) 1y (P) 2y (P) when z is not x, z is not y, y is not x 3y Invitational: 11-12 with the fit shows tp(y)=11..12 4y Game: 13+ with the fit shows tp(y)>=13 when y is H | y is S 3N Game: 13+, {z} stopped shows points>=13, stop(z) when y is C | y is D after 1x (1z) 1y (P) 1N (P) when z is not x, z is not y, y is not x 2N Invitational: 11-12 shows points=11..12, y<=5 3N Game: 13+ shows points>=13, y<=5 | y is C | y is D 3y Invitational: 6+ {y}, 11-12 shows y>=6, points=11..12 4y Game: 6+ {y}, 13+ shows y>=6, points>=13 when y is H | y is S after 1x (1y) 2z (P) 2M (P) | 1x (1y) 2z (P) 3M (P) | 1x (2y) 2z (P) 2M (P) | 1x (2y) 2z (P) 3M (P) | 1x (2y) 3z (P) 3M (P) when y is not x, z is not x, z is not y, M is not x, M is not y, M is not z 4M Game: four {M}, 13+ shows M>=4, points>=13 cheapest(M) Raise: four {M}, 11-12 shows M>=4, points=11..12 3N Game: 13+, {y} stopped shows points>=13, stop(y), M<=3 cheapest(x) Preference: 11-12 shows x>=3, points=11..12, M<=3 cheapest(y) Cue bid: 13+, no stopper, forcing to game [alert] [artificial] shows points>=13 when cheapest_rank(y)<=18 P Minimum: no game shows points<=10 cheapest(x) Preference: two or more {x} shows x>=2 after 1x (1y) 2z (P) 2x (P) | 1x (1y) 2z (P) 3x (P) | 1x (2y) 2z (P) 3x (P) | 1x (2y) 3z (P) 3x (P) when y is not x, z is not x, z is not y 4x Game: 3+ {x}, 13+ shows x>=3, points>=13 when x is H | x is S 3N Game: 13+, {y} stopped shows points>=13, stop(y) cheapest(x) Invitational raise: 3+ {x}, 11-12 shows x>=3, points=11..12 cheapest(y) Cue bid: 13+, no stopper, forcing to game [alert] [artificial] shows points>=13 when cheapest_rank(y)<=18 after 1x (1y) 2z (P) 3z (P) | 1x (2y) 2z (P) 3z (P) when y is not x, z is not x, z is not y 4z Game in the fit: 13+ shows points>=13 when z is H | z is S 3N Game: 13+, {y} stopped shows points>=13, stop(y) when z is C | z is D cheapest(y) Cue bid: 13+, no stopper, forcing to game [alert] [artificial] shows points>=13 when z is C | z is D, cheapest_rank(y)<=18 after 1x (2y) 3z (P) 4z (P) when y is not x, z is not x, z is not y, z is C | z is D 5{z} Game in the minor: 13+ shows points>=13 P No game shows points<=12 after 1x (X) XX (1y) 2x (P) | 1x (X) XX (2y) 2x (P) | 1x (X) XX (1y) 3x (P) | 1x (X) XX (2y) 3x (P) when y is not x 4{x} Game: 12+ with a doubleton or better shows x>=2, hcp>=12 when x is H | x is S 3N Game: 12+ with a stopper in {y} shows hcp>=12, stop(y) when x is C | x is D | x<=1 5{x} Game in the minor: 13+ shows x>=2, hcp>=13 when x is C | x is D 3{x} Invitational: 10-11 with a doubleton shows x>=2, hcp=10..11 when partner.last=2{x} P Minimum for the redouble: no game after (any auction) when partner.last=1N | partner.last=2N, me.has_bid | style is not bba, partner.balanced, !they.bid | lho.last=P, we.trump is none, !asked 3N Game in notrump shows we.points.min>=25, we.fit(S).min<=7, we.fit(H).min<=7 2N Invitational shows we.points.max>=25, we.fit(S).min<=7, we.fit(H).min<=7 when partner.last=1N 4S Game in the spade fit shows we.points.min>=25, we.fit(S).min>=8 4H Game in the heart fit shows we.points.min>=25, we.fit(H).min>=8 3S Invitation in the spade fit shows we.points.max>=25, we.fit(S).min>=8 when partner.last=1N 3H Invitation in the heart fit shows we.points.max>=25, we.fit(H).min>=8 when partner.last=1N P No game shows we.points.max<=26 6N Slam in notrump shows hcp+partner.hcp.min>=34, we.fit(S).min<=7, we.fit(H).min<=7 4N Quantitative: invites 6NT shows hcp+partner.hcp.min>=32, hcp+partner.hcp.max<=35, we.fit(S).min<=7, we.fit(H).min<=7 when quant_4nt after 1x (X) 1z (1y) X (P) when z is not x, y is not x, y is not z, !asked support cheapest(N) A stopper in {y} shows stop(y), z<=5 cheapest(z) Five or more {z} shows z>=5 cheapest(x) Three or more of partner's {x} shows x>=3 cheapest(z) Rebids {z} == responses: Responses to one-level suit openings file: conventions/base/responses.bid needs: base skills: partnership_bidding/basic_bidding, partnership_bidding/basic_major, bidding_conventions/walsh, bidding_conventions/forcing_1nt, bidding_conventions/semi_forcing_1nt define inv_jump_raise = limit_raise, !bergen, !rbergen define soloway_js(y, x) = controls>=4, y>=5, hcp>=16 | system is not brill, (y>=6, top5(y)>=4, points>=17, second_longest<=3, x<=3) | (y>=6, quality(y)>=excellent, has(J,y), points>=17, x<=3) | (top5(y)>=3, hcp>=18, x<=3, balanced | (y=6, second_longest=3, shortest=2)) | (top5(y)>=3, x>=4, tp(x)>=17) after 1C (P) when over_1c is up_the_line, !twalsh 1D 4+ diamonds, 6+ HCP shows D>=4, hcp>=6, D>=H, D>H | D=4, D>=S, D>S | D=4 1H 4+ hearts, 6+ HCP shows H>=4, hcp>=6, H>=D, H>D | H>=5, H>=S, H>S | H=4 1S 4+ spades, 6+ HCP shows S>=4, hcp>=6, S>=D, S>D | S>=5, S>H | S>=5, S>=H after 1C (P) when over_1c is walsh, !twalsh 1D Walsh: 4+ diamonds, no 4-card major unless 12+ HCP shows D>=4, hcp>=6, (H<=3, S<=3) | hcp>=12, D>=H, D>=S 1H 4+ hearts, 6+ HCP shows H>=4, hcp>=6, H>=S, H>S | H=4, hcp<=11 | H>D 1S 4+ spades, 6+ HCP shows S>=4, hcp>=6, S>H | S>=5, S>=H, hcp<=11 | S>D after 1C (P) 1N 6-10 HCP, balanced, no 4-card major or diamonds shows hcp=6..10, H<=3, S<=3, D<=3 when !inverted | C<=4 2D Strong jump shift: 15+, 5+ diamonds shows D>=5, hcp>=15 when strong_js, !weak_js, !soloway, !passed_hand after 1D (P) 1H 4+ hearts, 6+ HCP shows H>=4, hcp>=6, H>=S, H>S | H=4 when hcp<=10 | H>=C | (gf21, hcp<=11 | points<=12) 1S 4+ spades, 6+ HCP shows S>=4, hcp>=6, S>H | S>=5, S>=H when hcp<=10 | S>=C | (gf21, hcp<=11 | points<=12) 1N 6-10 HCP, no 4-card major shows hcp=6..10, H<=3, S<=3 when !inverted | D<=4 2C 11+ points, 4+ clubs shows C>=4, points>=11 | C>=6, suit_points>=10, H<=3 | C>H, S<=3 | C>S when !gf21 2C Two over one, game forcing: 4+ clubs shows C>=4, (style is not bba, hcp>=12, points>=13) | (style is bba, hcp>=13), H<=3 | C>H, S<=3 | C>S when gf21, !passed_hand 3C Invitational jump shift: 10-12 points, 6+ clubs shows C>=6, points=10..12, H<=3, S<=3 when inv_js, !weak_js3 after 1m (P) 2m Raise: 6-9, 5+ {m}, no 4-card major shows m>=5, hcp>=6, points<=9, H<=3, S<=3 when !inverted 3m Limit raise: 10-12 HCP, 5+ {m}, no 4-card major shows m>=5, hcp=10..12, H<=3, S<=3 when !inverted 3N Game values, no 4-card major shows hcp>=13, H<=3, S<=3 when !inverted 2N Invitational: 11-12, balanced, no 4-card major shows balanced, points=11..12, H<=3, S<=3 when nt2 is invitational 3N 13-15, balanced, no 4-card major shows balanced, points=13..15, H<=3, S<=3 when nt2 is invitational 2N 13-15, balanced, no 4-card major: game forcing shows balanced, points=13..15, H<=3, S<=3 when nt2 is game_forcing 3N 16-17, balanced, no 4-card major shows balanced, points=16..17, H<=3, S<=3 when nt2 is game_forcing 2H Strong jump shift: 15+, 5+ hearts shows H>=5, hcp>=15 when strong_js, !weak_js, !soloway, !passed_hand 2S Strong jump shift: 15+, 5+ spades shows S>=5, hcp>=15 when strong_js, !weak_js, !soloway, !passed_hand after 1D (P) when gf21, nt2 is invitational 2N Invitational: 11-12, 4+ clubs, no 4-card major shows points=11..12, C>=4, H<=3, S<=3, D<=3 after 1D (P) when !inverted 3D Limit raise: 10-12 HCP, four diamonds, no 4-card major shows D=4, hcp=10..12, H<=3, S<=3, !balanced after 1D (P) when gf21 3C Invitational jump shift: 10-12 points, 6+ clubs shows C>=6, hcp>=10, hcp<=11 | points<=12, H<=3, S<=3 when !weak_js3 after 1D (P) when nt2 is game_forcing 2C 11-12, balanced, no 4-card major shows balanced, points=11..12, C>=3, H<=3, S<=3 after 1C (P) when nt2 is game_forcing, !twalsh 1D 11-12, balanced, no 4-card major shows balanced, points=11..12, D>=3, H<=3, S<=3 after 1H (P) 1S 4+ spades, 6+ HCP shows S>=4, hcp>=6 when H<=2 | (style is not bba, (H=3, tp(H)>=11) | tp(H)>=13 | !inv_jump_raise) | (style is bba, H=3, hcp>=11 | S>=6 | (hcp>=10, S>=5 | shortest<=2)), hcp<=10 | (S>=C, S>=D) | (hcp<=12, C<=5, D<=5) | (gf21, hcp<=11 | points<=12) 1N 6-10 HCP, no heart fit, no 4 spades shows hcp=6..10, H<=2, S<=3 when !gf21 1N Forcing 1NT: 6-12 HCP, no heart fit, no 4 spades shows hcp=6..12, H<=2, S<=3 when gf21, f1n 1N 6-12 HCP, no heart fit, no 4 spades shows hcp=6..12, H<=2 | (system is brill, H=3, tp(H)>=10), S<=3 when gf21, !f1n, !semi 1N Semi-forcing 1NT: 6-12 HCP, no heart fit, no 4 spades shows hcp=6..12, H<=2, S<=3 when gf21, !f1n, semi 2S Strong jump shift: 15+, 5+ spades shows S>=5, hcp>=15 when strong_js, !weak_js, !soloway, !passed_hand 2C 11+ points, 4+ clubs shows C>=4, points>=11 | C>=6 | (H>=3, tp(H)>=11), suit_points>=10, C>=D, S<=3 | (C>S, hcp>=13 | C>=6) when !gf21, !passed_hand | (!drury, !drury_rev), H<=2 | (style is not bba, H=3 | tp(H)>=13) | (style is bba, hcp>=13 | (hcp>=12, shortest<=2) | (hcp>=11, H>=4)) 2C Two over one, game forcing: 4+ clubs shows C>=4, (style is not bba, hcp>=12, points>=13) | (style is bba, hcp>=13), C>=D, S<=3 | (C>S, hcp>=13 | C>=6) when gf21, !passed_hand, !passed_hand | (!drury, !drury_rev), H<=2 | (style is not bba, H=3 | tp(H)>=13) | (style is bba, hcp>=13 | (hcp>=12, shortest<=2) | (hcp>=11, H>=4)) 2D 11+ points, 4+ diamonds shows D>=4, points>=11 | D>=6 | (H>=3, tp(H)>=11), suit_points>=10, D>C, S<=3 | (D>S, hcp>=13 | D>=6) when !gf21, H<=2 | (style is not bba, H=3 | tp(H)>=13) | (style is bba, hcp>=13 | (hcp>=12, shortest<=2) | (hcp>=11, H>=4)) 2D Two over one, game forcing: 4+ diamonds shows D>=4, (style is not bba, hcp>=12, points>=13) | (style is bba, hcp>=13), D>C, S<=3 | (D>S, hcp>=13 | D>=6) when gf21, !passed_hand, H<=2 | (style is not bba, H=3 | tp(H)>=13) | (style is bba, hcp>=13 | (hcp>=12, shortest<=2) | (hcp>=11, H>=4)) 3H Limit raise: 11-12 support points, 3+ hearts shows H>=3, tp(H)=11..12 | (H>=4, tp(H)=10, shortest<=2), hcp<=12 when !passed_hand | (!drury, !drury_rev), inv_jump_raise, H>=4 | S<=3, style is not bba, system is not brill 3H Limit raise: 10-12 support points, 4+ hearts shows H>=4, tp(H)=10..12, hcp<=12 when !passed_hand | (!drury, !drury_rev), inv_jump_raise, system is brill 3C Invitational jump shift: 10-12 points, 6+ clubs shows C>=6, points=10..12, H<=2 when inv_js, !weak_js3 3D Invitational jump shift: 10-12 points, 6+ diamonds shows D>=6, points=10..12, H<=2 when inv_js, !weak_js3 after 1S (P) 1N 6-10 HCP, no spade fit shows hcp=6..10, S<=2 when !gf21 1N Forcing 1NT: 6-12 HCP, no spade fit shows hcp=6..12, S<=2 when gf21, f1n 1N 6-12 HCP, no spade fit shows hcp=6..12, S<=2 | (system is brill, S=3, tp(S)>=10) when gf21, !f1n, !semi 1N Semi-forcing 1NT: 6-12 HCP, no spade fit shows hcp=6..12, S<=2 when gf21, !f1n, semi 2C 11+ points, 4+ clubs shows C>=4, points>=11 | C>=6 | (S>=3, tp(S)>=11), suit_points>=10, C>=D, C>=H when !gf21, !passed_hand | (!drury, !drury_rev), S<=2 | (style is not bba, S=3 | tp(S)>=13) | (style is bba, hcp>=13 | (hcp>=12, shortest<=2) | (hcp>=11, S>=4)) 2C Two over one, game forcing: 4+ clubs shows C>=4, (style is not bba, hcp>=12, points>=13) | (style is bba, hcp>=13), C>=D, C>=H when gf21, !passed_hand, !passed_hand | (!drury, !drury_rev), S<=2 | (style is not bba, S=3 | tp(S)>=13) | (style is bba, hcp>=13 | (hcp>=12, shortest<=2) | (hcp>=11, S>=4)) 2D 11+ points, 4+ diamonds shows D>=4, points>=11 | D>=6 | (S>=3, tp(S)>=11), suit_points>=10, D>C, D>=H when !gf21, S<=2 | (style is not bba, S=3 | tp(S)>=13) | (style is bba, hcp>=13 | (hcp>=12, shortest<=2) | (hcp>=11, S>=4)) 2D Two over one, game forcing: 4+ diamonds shows D>=4, (style is not bba, hcp>=12, points>=13) | (style is bba, hcp>=13), D>C, D>=H when gf21, !passed_hand, S<=2 | (style is not bba, S=3 | tp(S)>=13) | (style is bba, hcp>=13 | (hcp>=12, shortest<=2) | (hcp>=11, S>=4)) 2H 11+ points, 5+ hearts shows H>=5, points>=11 | H>=6 | (S>=3, tp(S)>=11), suit_points>=10 when !gf21, S<=2 | (style is not bba, S=3 | tp(S)>=13) | (style is bba, hcp>=13 | (hcp>=12, shortest<=2) | (hcp>=11, S>=4)) 2H Two over one, game forcing: 5+ hearts shows H>=5, (style is not bba, hcp>=12, points>=13) | (style is bba, hcp>=13) when gf21, !passed_hand, S<=2 | (style is not bba, S=3 | tp(S)>=13) | (style is bba, hcp>=13 | (hcp>=12, shortest<=2) | (hcp>=11, S>=4)) 3S Limit raise: 11-12 support points, 3+ spades shows S>=3, tp(S)=11..12 | (S>=4, tp(S)=10, shortest<=2), hcp<=12 when !passed_hand | (!drury, !drury_rev), inv_jump_raise, style is not bba, system is not brill 3S Limit raise: 10-12 support points, 4+ spades shows S>=4, tp(S)=10..12, hcp<=12 when !passed_hand | (!drury, !drury_rev), inv_jump_raise, system is brill 2H 11+ points, 5+ hearts shows H>=5, hcp>=10, S<=2 | hcp>=13 | (hcp>=12, shortest<=2) | (hcp>=11, S>=4) when style is bba, !gf21 3C Invitational jump shift: 10-12 points, 6+ clubs shows C>=6, points=10..12, S<=2 when inv_js, !weak_js3 3D Invitational jump shift: 10-12 points, 6+ diamonds shows D>=6, points=10..12, S<=2 when inv_js, !weak_js3 3H Invitational jump shift: 10-12 points, 6+ hearts shows H>=6, points=10..12, S<=2 when inv_js, !weak_js3 after 1M (P) 2M Raise: 3+ {M} shows M>=3, hcp>=6, (tp(M)=6..10, M=3 | tp(M)<=9 | shortest>=3) | (!inv_jump_raise, tp(M)<=12) when style is not bba 4M Preemptive raise: 5+ {M}, weak shows M>=5, hcp=5..9 when style is not bba 2C Game values with a fit: a three-card minor to start shows M>=3, tp(M)>=13, C>=3 when !passed_hand | (!drury, !drury_rev), style is not bba 2D Game values with a fit: a three-card minor to start shows M>=3, tp(M)>=13, D>=3, C<=2 when style is not bba 2M Raise: 3+ {M} shows M>=3, hcp>=5, (tp(M)<=11, (M=3, hcp>=6, hcp<=10, hcp<=8 | shortest>=3) | (M>=4, hcp<=8, tp(M)+M<=14)) | (!inv_jump_raise, hcp=6..12) when style is bba 3M Limit raise: 3+ {M}, invitational shows M>=3, (M=3, hcp=11..12, shortest>=3) | (M=3, hcp=9..11, shortest<=2, tp(M)<=13) | (M>=4, hcp=9..10, shortest>=2, shortest>=3 | controls<=3, shortest>=3 | longest<=4), M is S | S<=3 | hcp<=9 when !passed_hand | (!drury, !drury_rev), inv_jump_raise, style is bba 4M Raise to game: 4+ {M} and shortness shows M>=4, (shortest<=1, hcp<=10, tp(M)+M>=15) | (shortest=2, hcp=9..10, controls>=4 | longest>=5) when style is bba 2C Game values with a fit: a three-card minor to start shows M>=3, hcp>=13 | (hcp>=12, shortest<=2) | (hcp>=11, M>=4), C>=3 when !passed_hand | (!drury, !drury_rev), style is bba 2D Game values with a fit: a three-card minor to start shows M>=3, hcp>=13 | (hcp>=12, shortest<=2) | (hcp>=11, M>=4), D>=3, C<=2 when style is bba 4M Game in the fit: 13+ support points shows M>=3, tp(M)>=13 2N 11-12, balanced, no fit shows balanced, points=11..12, M<=2 3N 13-15, balanced shows balanced, points=13..15, M<=3 after 1C (P) when weak_js 2D Weak jump shift: 6+ diamonds, 2-5 HCP [alert] shows D>=6, hcp=2..5 2H Weak jump shift: 6+ hearts, 2-5 HCP [alert] shows H>=6, hcp=2..5 2S Weak jump shift: 6+ spades, 2-5 HCP [alert] shows S>=6, hcp=2..5 after 1D (P) when weak_js 2H Weak jump shift: 6+ hearts, 2-5 HCP [alert] shows H>=6, hcp=2..5 2S Weak jump shift: 6+ spades, 2-5 HCP [alert] shows S>=6, hcp=2..5 after 1H (P) when weak_js 2S Weak jump shift: 6+ spades, 2-5 HCP [alert] shows S>=6, hcp=2..5, H<=2 after 1D (P) when weak_js3 3C Weak jump shift: 7+ clubs, 2-6 HCP [alert] shows C>=7, hcp=2..6 after 1H (P) when weak_js3 3C Weak jump shift: 7+ clubs, 2-6 HCP [alert] shows C>=7, hcp=2..6, H<=2 3D Weak jump shift: 7+ diamonds, 2-6 HCP [alert] shows D>=7, hcp=2..6, H<=2 after 1S (P) when weak_js3 3C Weak jump shift: 7+ clubs, 2-6 HCP [alert] shows C>=7, hcp=2..6, S<=2 3D Weak jump shift: 7+ diamonds, 2-6 HCP [alert] shows D>=7, hcp=2..6, S<=2 3H Weak jump shift: 7+ hearts, 2-6 HCP [alert] shows H>=7, hcp=2..6, S<=2 after 1C (P) when soloway, !weak_js, !passed_hand 2D Soloway jump shift: strong suit, 18+ balanced, or a fit [alert] shows soloway_js(D,C) 2H Soloway jump shift: strong suit, 18+ balanced, or a fit [alert] shows soloway_js(H,C) 2S Soloway jump shift: strong suit, 18+ balanced, or a fit [alert] shows soloway_js(S,C) after 1D (P) when soloway, !weak_js, !passed_hand 2H Soloway jump shift: strong suit, 18+ balanced, or a fit [alert] shows soloway_js(H,D) 2S Soloway jump shift: strong suit, 18+ balanced, or a fit [alert] shows soloway_js(S,D) after 1H (P) when soloway, !weak_js, !passed_hand 2S Soloway jump shift: strong suit, 18+ balanced, or a fit [alert] shows soloway_js(S,H) after 1x (P) P Fewer than 6 HCP shows hcp<=5 == roudi: Roudi file: conventions/base/roudi.bid card: other_conventions.roudi.play needs: responder-rebids skills: bidding_conventions/roudi after 1m (P) 1M (P) 1N (P) when !tw(m) 2C Roudi: invitational or better, asks for support and strength [alert] [artificial] shows M>=5 | (H>=4, S>=4), points>=11 after 1m (P) 1M (P) 1N (P) 2C (P) when !tw(m) 2D Minimum, at most two {M} [alert] [artificial] shows hcp<=13, M<=2 2H Minimum with three {M} [alert] [artificial] shows hcp<=13, M=3 2S Maximum with three {M} [alert] [artificial] shows hcp>=14, M=3 2N Maximum, at most two {M} [alert] shows hcp>=14, M<=2 3m Maximum with three {M} and five {m} [alert] shows hcp>=14, M=3, m>=5 after 1m (P) 1M (P) 1N (P) 2C (P) 2D (P) when !tw(m) 2N Invitational, no fit shows points=11..12, M<=5 3M Invitational: six {M} shows M>=6, points=11..12 3N Game shows points>=13, M<=5 4M Game: six {M} shows M>=6, points>=13 after 1m (P) 1M (P) 1N (P) 2C (P) 2H (P) when !tw(m) 3M Invitational, in the fit shows M>=5, points=11..12 4M Game in the fit shows M>=5, points>=13 2N Invitational, four {M} shows M=4, points=11..12 3N Game, four {M} shows M=4, points>=13 after 1m (P) 1M (P) 1N (P) 2C (P) 2S (P) | 1m (P) 1M (P) 1N (P) 2C (P) 3m (P) when !tw(m) 4M Game in the fit shows M>=5 3N Game, four {M} shows M=4 after 1m (P) 1M (P) 1N (P) 2C (P) 2N (P) when !tw(m) 4M Game: six {M} shows M>=6 3N Game shows M<=5 == soloway: Soloway jump shifts file: conventions/base/soloway.bid needs: responses skills: bidding_conventions/soloway after 1x (P) 2y (P) when soloway, !weak2, y is not x, two_level_jump(y,x) 3y Support for {y}: three with an honour, or four shows y>=4 | (y=3, quality(y)>=fair) 3x Rebids {x}: five or more, no support shows x>=5, y<=3, quality(y)<=poor | y<=2 cheapest(z) No support, a side suit with two of the top three honours shows z>=4, quality(z)>=good, y<=3, quality(y)<=poor | y<=2 when z is not x, z is not y 2N No support, no strong side suit shows y<=3, quality(y)<=poor | y<=2 after 1x (P) 2y (P) 2N (P) | 1x (P) 2y (P) 3x (P) when soloway, !weak2, y is not x, two_level_jump(y,x) cheapest(x) Type 4: support for {x} shows x>=4 cheapest(y) Type 1 or 2: a long, strong {y} shows y>=6, top5(y)>=4 3N Type 3: balanced, 18+ shows balanced cheapest(y) Rebids {y} shows y>=6 after 1x (P) 2y (P) 2z (P) | 1x (P) 2y (P) 3z (P) when soloway, !weak2, y is not x, z is not x, z is not y, two_level_jump(y,x) cheapest(x) Type 4: support for {x} shows x>=4 cheapest(y) Type 1 or 2: a long, strong {y} shows y>=6, top5(y)>=4 3N Type 3: balanced, 18+ shows balanced cheapest(y) Rebids {y} shows y>=6 == strong-openings: 2♣ and 2NT openings file: conventions/base/strong-openings.bid needs: base skills: bidding_conventions/strong_2c, partnership_bidding/two_club after (any auction) when opening 2N {two_nt_min}-{two_nt_max} HCP, balanced shows hcp=two_nt_min..two_nt_max, balanced 3N {three_nt_min}-{three_nt_max} HCP, balanced shows hcp=three_nt_min..three_nt_max, balanced, S<=4 | system is not brill, H<=4 | system is not brill when !gambling, !french 2C Strong 2♣: 22+ HCP [alert] [artificial] shows hcp>=22, !balanced | (system is not brill, hcp<=25) | (system is brill, hcp<=24 | S>=5 | H>=5) | hcp>=28 | gambling, !french | hcp<=23 when two_c is strong | two_c is very_strong, forcing_2c | forcing_1c, !benjamin 2C Strong 2♣: nine tricks with a major [alert] [artificial] shows hcp>=17, losers<=4, hcp+length_points>=23, (H>=6, quality(H)>=good) | (S>=6, quality(S)>=good) | (H>=5, S>=5), !french | hcp<=23 when two_c is strong | two_c is very_strong, forcing_2c | forcing_1c, !benjamin 2C Strong 2♣: ten tricks with a long suit [alert] [artificial] shows hcp>=17, losers<=3, hcp+length_points>=23, (C>=6, quality(C)>=good) | (D>=6, quality(D)>=good) | (H>=6, quality(H)>=good) | (S>=6, quality(S)>=good) | shape 5-5-x-x, !french | hcp<=23 when two_c is strong | two_c is very_strong, forcing_2c | forcing_1c, !benjamin after 2C (P) 2D Waiting [artificial] when two_d_resp is waiting | two_d_resp is negative 2H Positive: five or more hearts, 8+ shows H>=5, hcp>=8 when !bust_2h, (H>=6, top5(H)>=3) | quality(H)>=good 2S Positive: five or more spades, 8+ shows S>=5, hcp>=8 when (S>=6, top5(S)>=3) | quality(S)>=good 3C Positive: five or more clubs, 8+ shows C>=5, hcp>=8 when (C>=6, top5(C)>=3) | quality(C)>=good 3D Positive: five or more diamonds, 8+ shows D>=5, hcp>=8 when (D>=6, top5(D)>=3) | quality(D)>=good 2N Positive: balanced, 8+ shows balanced, hcp>=8 2H Bust: fewer than 3 HCP [artificial] shows hcp<=2 when bust_2h after 2C (P) 2D (P) 2N 22-23 HCP, balanced shows hcp=22..23, balanced 3N 24-25 HCP, balanced shows balanced, hcp>=24, hcp<=25 | (gambling, hcp<=27) 4N 28+ HCP, balanced shows hcp>=28, balanced 2H 5+ hearts shows H>=5 2S 5+ spades shows S>=5 3C 5+ clubs shows C>=5 3D 5+ diamonds shows D>=5 after 2C (2x) P (P) | 2C (3x) P (P) 2N 22-23 HCP, balanced, a stopper in {x} shows hcp=22..23, balanced, stop(x) 3N 24-25 HCP, balanced, a stopper in {x} shows hcp=24..25, balanced, stop(x) after 2C (P) 2N (P) 3S (P) | 2C (P) 3C (P) 3S (P) | 2C (P) 3D (P) 3S (P) 4S Support: three or more spades shows S>=3 after 2C (P) 2N (P) 3H (P) | 2C (P) 3C (P) 3H (P) | 2C (P) 3D (P) 3H (P) 4H Support: three or more hearts shows H>=3 after 2C (P) 2y (P) | 2C (P) 3y (P) when y is not D | partner.D>=5, y is not H | !bust_2h cheapest(y) Raise: three or more {y}, 22+ shows y>=3, hcp>=22 cheapest(S) Five or more spades shows S>=5 when y is not S cheapest(H) Five or more hearts shows H>=5 when y is not H cheapest(D) Five or more diamonds shows D>=5 when y is not D cheapest(C) Five or more clubs shows C>=5 when y is not C cheapest(N) Balanced, no fit for {y} shows balanced, hcp>=22 after 2C (P) 2y (P) 2N (P) when y is H | y is S, y is not H | !bust_2h, style is bba 3y Six or more {y} shows y>=6 3S Four or more spades shows S>=4 when y is H 3H Four or more hearts shows H>=4 when y is S 3C Four or more clubs shows C>=4 3D Four or more diamonds shows D>=4 4N Quantitative: invites 6NT shows balanced, hcp+partner.hcp.min>=30, hcp+partner.hcp.min<=32 when quant_4nt 6N Slam in notrump shows balanced, hcp+partner.hcp.min>=33 3N To play after 2C (P) 2y (P) 2N (P) 3z (P) when y is H | y is S, z is H | z is S, z is not y, y is not H | !bust_2h, style is bba 4N Keycard ask in {z}: four-card support [artificial] shows z>=4 when k1430 | k0314 4z Four-card support: game in {z} shows z>=4 when !k1430, !k0314 after 2C (P) 2N (P) 3S Five or more spades shows S>=5 3H Five or more hearts shows H>=5 3D Five or more diamonds shows D>=5 3C Five or more clubs shows C>=5 3N Balanced 22, no suit to show shows balanced, hcp>=22 4N Quantitative: 23-24 balanced, invites 6NT shows balanced, hcp=23..24 when quant_4nt 6N Slam in notrump shows hcp>=25, balanced after 2C (P) 2D (P) 2H (P) 3C Second negative: fewer than 3 HCP [artificial] shows hcp<=2 when !bust_2h after 2C (P) 2D (P) 2S (P) 3C Second negative: fewer than 3 HCP [artificial] shows hcp<=2 when !bust_2h after 2C (P) 2D (P) 3C (P) 3D Second negative: fewer than 3 HCP [artificial] shows hcp<=2 when !bust_2h after 2C (P) 2H (P) when bust_2h 2N 22-23 HCP, balanced shows hcp=22..23, balanced 3N 24-25 HCP, balanced shows balanced, hcp>=24, hcp<=25 | (gambling, hcp<=27) 4N 28+ HCP, balanced shows hcp>=28, balanced 2S 5+ spades: forcing one round shows S>=5 3H 5+ hearts shows H>=5 3C 5+ clubs shows C>=5 3D 5+ diamonds shows D>=5 after 2C (P) 2H (P) 2S (P) when bust_2h 3S Three or more spades shows S>=3 2N No spade support after 2C (P) 2H (P) 3H (P) when bust_2h 4H Raise to game: three or more hearts shows H>=3 P No support after 2C (P) 2H (P) 3C (P) | 2C (P) 2H (P) 3D (P) | 2C (P) 2H (P) 2N (P) when bust_2h P No further bid after 2C (P) 2H (P) 2S (P) 2N (P) when bust_2h 4S Game in hand: six or more spades shows S>=6, losers<=3 3S Six or more spades: to play shows S>=6 3H Five or more hearts too shows H>=5 3D Four or more diamonds too shows D>=4 3C Four or more clubs too shows C>=4 P No further bid == transfer-walsh: Transfer Walsh responses to 1♣ file: conventions/base/transfer-walsh.bid card: minor_openings.one_club.transfer_resp needs: responder-rebids skills: bidding_conventions/transfer_walsh after 1C (P) 1D Transfer: 4+ hearts, 6+ HCP [alert] [artificial] shows H>=4, hcp>=6, H>=S, H>S | H=4, hcp<=11 | H>=D 1H Transfer: 4+ spades, 6+ HCP [alert] [artificial] shows S>=4, hcp>=6, S>H | S>=5, S>=H, hcp<=11 | S>=D 1S Transfer Walsh: 4+ diamonds, no major unless 12+ HCP [alert] [artificial] shows D>=4, hcp>=6, (H<=3, S<=3) | (hcp>=12, D>H, D>S) after (any auction) when asked tw_accept(M) 1{M} Accepts: three {M}, or four and a minimum shows M>=3, M=3 | tp(M)<=15 2{M} Raise: four {M}, 16-18 shows M>=4, tp(M)=16..18 4{M} Game raise: four {M}, 19+ shows M>=4, tp(M)>=19 1S 4+ spades, not three hearts shows S>=4, H<=2, suit_points<=18 when M is H 2H Reverse: 4+ hearts, longer clubs, 17+, not three spades shows H>=4, C>H, S<=2, suit_points>=17 when M is S 1N 12-14 HCP, balanced, not three {M} shows balanced | shape 5-4-2-2, hcp=12..14, M<=2 2N 18-19 HCP, balanced, not three {M} shows balanced, hcp=18..19, M<=2 2C 6+ clubs, minimum, not three {M} shows C>=6, suit_points<=15, M<=2 3C 6+ clubs, 16-18, not three {M} shows C>=6, suit_points=16..18, M<=2 2D Reverse: 4+ diamonds, longer clubs, 17+, not three {M} shows D>=4, C>D, suit_points>=17, M<=2 3N 18-21 with six or more clubs, not three {M} shows C>=6, hcp=18..21, M<=2 1N Minimum, not three {M} shows hcp<=14, M<=2 2C 5+ clubs, not three {M} shows C>=5, M<=2 after (any auction) when asked tw_nomajor 1N 12-14 HCP, balanced shows balanced | shape 5-4-2-2, hcp=12..14 2N 18-19 HCP, balanced shows balanced, hcp=18..19 2D Raise: 4+ diamonds, minimum shows D>=4, tp(D)<=15 3D Jump raise: 4+ diamonds, 16+ shows D>=4, tp(D)>=16 2C 6+ clubs, minimum shows C>=6, suit_points<=15 3C 6+ clubs, 16-18 shows C>=6, suit_points=16..18 3N 18-21 with six or more clubs shows C>=6, hcp=18..21 1N Minimum shows hcp<=14 2C 5+ clubs shows C>=5 after 1C (P) 1D (P) 1H (P) | 1C (P) 1H (P) 1S (P) P Weak: to play shows points<=10 3N Game: 13+, four of the major shows points>=13 2N Invitational: 11-12 shows points=11..12 after 1C (P) 1D (P) 1H (P) 2H Five or more hearts, 8-10: competitive shows H>=5, points=8..10 3H Invitational: five or more hearts, 11-12 shows H>=5, tp(H)=11..12 4H Game: five or more hearts, 13+ shows H>=5, tp(H)>=13 1S Four spades as well, 6+ shows S>=4, H=4 after 1C (P) 1H (P) 1S (P) 2S Five or more spades, 8-10: competitive shows S>=5, points=8..10 3S Invitational: five or more spades, 11-12 shows S>=5, tp(S)=11..12 4S Game: five or more spades, 13+ shows S>=5, tp(S)>=13 2H Four or more hearts as well, 8-10 shows H>=4, S>=5, points=8..10 after 1C (P) 1D (P) 2H (P) | 1C (P) 1H (P) 2S (P) P Weak: no game shows points<=7 4{trump} Game shows points>=8 after 1C (P) 1x (P) 1N (P) P Weak: no game shows points<=10 2N Invitational: 11-12 shows points=11..12 3N Game: 13+ shows points>=13 4N Quantitative: invites 6NT shows balanced, points+partner.points.min>=31, points+partner.points.min<=32 when q4n 6N Slam in notrump shows balanced, points+partner.points.min>=33 after 1C (P) 1S (P) 1N (P) | 1C (P) 1S (P) 2C (P) 2H Game force: four hearts, longer diamonds shows H>=4, D>=5, D>S, points>=13 2S Game force: four spades, longer diamonds shows S>=4, D>=5, H<=3, points>=13 after 1C (P) 1D (P) 1N (P) 2S Responder's reverse: 4+ spades, 5+ hearts, game forcing shows S>=4, H>=5, points>=13 after 1C (P) 1H (P) 1N (P) 3H Four hearts, five spades, game forcing shows H>=4, S>=5, points>=13 after 1C (P) 1S (P) 1N (P) 2M (P) | 1C (P) 1S (P) 2C (P) 2M (P) 3{M} Four {M}: the fit shows M>=4 2S Four spades, not four hearts shows S>=4, H<=3 when M is H 3N No fit in {M} after 1C (P) 1S (P) 1N (P) 2H (P) 2S (P) | 1C (P) 1S (P) 2C (P) 2H (P) 2S (P) 4S Four spades as well: game shows S>=4 3N Game in notrump after 1C (P) 1D (P) 1N (P) 2H Weak: six or more hearts shows H>=6, points<=10 3H Invitational: six or more hearts shows H>=6, points=11..12 4H Game: six or more hearts shows H>=6, points>=13 after 1C (P) 1H (P) 1N (P) 2S Weak: six or more spades shows S>=6, points<=10 3S Invitational: six or more spades shows S>=6, points=11..12 4S Game: six or more spades shows S>=6, points>=13 after 1C (P) 1D (P) 1S (P) P Weak: four spades too shows S>=4, points<=10 2S Raise: four spades, weak shows S>=4, points<=10 3S Invitational raise: four spades shows S>=4, tp(S)=11..12 4S Game: four spades shows S>=4, tp(S)>=13 2H Weak: six or more hearts shows H>=6, points<=10 1N 6-10, no spade fit shows points<=10, S<=3 2N Invitational: 11-12, no spade fit shows points=11..12, S<=3 3N Game: 13+, no spade fit shows points>=13, S<=3 4N Quantitative: invites 6NT, no spade fit shows balanced, S<=3, points+partner.points.min>=31, points+partner.points.min<=32 when q4n 6N Slam in notrump, no spade fit shows balanced, S<=3, points+partner.points.min>=33 after 1C (P) 1x (P) 2C (P) P Weak: no game shows points<=10 2N Invitational: 11-12 shows points=11..12 3N Game: 13+ shows points>=13 after 1C (P) 1x (P) 3C (P) P Weak: no game shows points<=8 3N Game: 9+ shows points>=9 5C Game in clubs: 9+, three clubs, a suit unstopped shows C>=3, points>=9, !balanced after 1C (P) 1S (P) 2D (P) P Weak: no game shows tp(D)<=10 3D Invitational: 11-12 shows tp(D)=11..12 3N Game: 13+ shows points>=13 after 1C (P) 1D (P) 1H (P) 1S (P) 2S Four spades, minimum shows S>=4, tp(S)<=15 3S Four spades, 16-18 shows S>=4, tp(S)=16..18 4S Four spades, 19+ shows S>=4, tp(S)>=19 2H Four hearts, minimum shows H>=4, S<=3, suit_points<=15 2C Six or more clubs, minimum shows C>=6, S<=3, H<=3, suit_points<=15 2N 18-19, balanced shows balanced, hcp=18..19, S<=3 1N Minimum, no four spades shows hcp<=14, S<=3 3N 15+, no four spades shows hcp>=15, S<=3 after 1C (P) 1x (P) 2z (P) when we.forcing=round 2N Forced: minimum, no fit shows points<=7 3N Game: 8+ shows points>=8 3C Three or more clubs, 8+: game forcing shows C>=3, points>=8 3z Four {z}, 8+: game forcing shows z>=4, points>=8 after 1C (P) 1D (P) 2z (P) when we.forcing=round 2H Five or more hearts shows H>=5 when z is D after 1C (P) 1H (P) 2z (P) when we.forcing=round 2S Five or more spades shows S>=5 after 1C (P) 1D (P) 2z (P) 2H (P) | 1C (P) 1H (P) 2z (P) 2S (P) 2N No fit, minimum reverse shows hcp<=18 3N No fit, 19+ shows hcp>=19 after 1C (P) 1D (P) 2z (P) 2H (P) 3H Two hearts: the 5-2 fit shows H=2 after 1C (P) 1H (P) 2z (P) 2S (P) 3S Two spades: the 5-2 fit shows S=2 == two-way-nmf: Two-way New Minor Forcing (xyNT) file: conventions/base/two-way-nmf.bid needs: responder-rebids skills: bidding_conventions/two_way_nmf after 1x (P) 1y (P) 1N (P) when twoway | xyz, !tw(x) 2C xyNT: relay to 2♦, invitational or a diamond sign-off [alert] [artificial] shows points=11..12 | (D>=6, points<=10, y is not D, x is not D) 2D xyNT: artificial game force [alert] [artificial] shows points>=13, y>=5 | (H>=4, S>=4) | !balanced 2N xyNT: relay to 3♣, a club sign-off [alert] [artificial] shows C>=6, points<=10 when x is not C, y is not C 3y Slam try: six or more {y} shows y>=6, points>=16 after (any auction) when asked xy_relay 2D Forced relay [alert] [artificial] after (any auction) when asked xy_clubs 3C Forced relay [alert] [artificial] after 1x (P) 1M (P) 1N (P) 2C (P) 2D (P) when twoway | xyz, !tw(x) P To play in 2♦ shows D>=6, points<=10 2M Invitational: five {M} shows M=5, points=11..12 3M Invitational: six {M} shows M>=6, points=11..12 2N Invitational, balanced shows points=11..12, M<=5 after 1C (P) 1D (P) 1N (P) 2C (P) 2D (P) when twoway | xyz, !tw(C) P Weak shows points<=10 3D Invitational: six diamonds shows D>=6, points=11..12 2N Invitational, balanced shows points=11..12 after 1x (P) 1y (P) 1N (P) 2N (P) 3C (P) when twoway | xyz, !tw(x) P To play in 3♣ shows C>=6 after (any auction) when asked xy_gf 2H Three hearts shows H=3 when partner.H>=4 2S Three spades shows S=3 when partner.S>=4 2H Four hearts, not three spades shows H>=4, S<=2 when partner.S>=4 2N No fit to show after (any auction) when answered xy_gf 4H Game in the heart fit shows H>=5 | (H>=4, partner.H.min>=4) when partner.H>=3 4S Game in the spade fit shows S>=5 | (S>=4, partner.S.min>=4) when partner.S>=3 4H Game: six hearts shows H>=6 4S Game: six spades shows S>=6 3N Game, no major fit == weak-jump-shifts: Weak jump shifts file: conventions/base/weak-jump-shifts.bid needs: responses skills: bidding_conventions/weak_jump_shifts define two_level_jump(x, y) = y is C | (y is D, x is H | x is S) | (y is H, x is S) after 1x (P) 2y (P) when weak2, y is not x, partner.jumped P To play: two of {y} 4y Game: 18+ with two or more {y} shows y>=2, hcp>=18 when y is H | y is S 3y Raise: 3+ {y}, 16-17, invitational shows y>=3, hcp=16..17 2N Forcing game try: asks for a feature [alert] [artificial] shows y>=3, hcp>=16, hcp<=17 | y is C | y is D 3x Rebids {x}: seven or more, not forcing shows x>=7, y<=1, hcp<=17 3x Rebids {x}: six or more, 18+, not forcing shows x>=6, y<=1, hcp>=18 when x is C | x is D 4x Game in my own major: seven, or six good ones, 18+ shows x>=7 | (x>=6, quality(x)>=good), y<=1, hcp>=18 when x is H | x is S cheapest(z) New suit: 4+ {z}, 17+, forcing shows z>=4, hcp>=17, y<=1 when z is not x, z is not y after 1x (P) 2y (P) 2N (P) when weak2, y is not x 3N Maximum: 4-5, two of the top three honours shows hcp>=4, quality(y)>=good 3z Maximum: 4-5, a feature in {z} shows hcp>=4, has(A,z) | has(K,z) when z is not y 3y Minimum: 2-3, or no feature after 1x (P) 2y (P) 2N (P) 3y (P) when weak2, y is not x P Minimum: to play 4y Game shows hcp>=17, y>=3 when y is H | y is S after 1x (P) 2y (P) 2N (P) 3z (P) when weak2, y is not x, z is not y 4y Game in {y} shows y>=2 when y is H | y is S 3N Game in notrump when y is C | y is D after 1x (P) 2y (P) 2N (P) 3N (P) when weak2, y is not x P No further bid after 1x (P) 2y (P) 3x (P) when weak2, y is not x P Opener's suit: play here after 1x (P) 2y (P) 3y (P) when weak2, y is not x P Minimum: play three 4y Maximum: 4-5, game shows hcp>=4 when y is H | y is S after 1x (P) 2y (P) 2z (P) | 1x (P) 2y (P) 3z (P) when weak2, y is not x, z is not x, z is not y 3z Raise: four {z} shows z>=4 cheapest(y) Rebids {y}: no fit shows y>=6 cheapest(x) Preference for {x} shows x>=2 after 1x (P) 2y (P) 2z (P) * (P) | 1x (P) 2y (P) 3z (P) * (P) when weak2, y is not x, z is not x, z is not y P No game: stop here 4z Game in the fit shows z>=4, hcp>=19 when partner.z>=4, z is H | z is S 3N Game in notrump: 22+ shows hcp>=22 after 1x (P) 3y (P) when weak3, y is not x, partner.jumped P No further bid 4y Game: 17+ with two or more {y} shows y>=2, hcp>=17 when y is H | y is S 3N To play: 18+, a fit for {y}, side suits stopped shows y>=2, hcp>=18 when y is C | y is D 4x Game in my own major: seven, or six good ones, 16+ shows x>=7 | (x>=6, quality(x)>=good), hcp>=16, y<=1 when x is H | x is S == weak-two-responses: Responses to a weak two file: conventions/base/weak-two-responses.bid needs: preempts skills: bidding_conventions/weak_2s, bidding_conventions/ogust, partnership_bidding/weak_twos define w2_slam(t) = hcp+partner.hcp.min>=33 | (fit_slam_values(t), !two_bare_beside(t)) define w2_solid = partner.last=3N, ask2nt is ogust | style is not bba define w2_fit_slam(t) = (t>=2, w2_slam(t)) | (w2_solid, t>=1, hcp>=21, S<=4 | t is S, H<=4 | t is H) after 2x (P) when weak_two_suit(x), x is not N, x is not C | two_c is natural, style is standard 2N Asks: how good is the weak two? [alert] [artificial] shows hcp>=15 3x Preemptive raise: four-card support shows x>=4, hcp<=14 4x Game in the fit shows x>=4, hcp>=14 when x is H | x is S P No interest shows hcp<=14 after 2x (P) when weak_two_suit(x), x is not N, x is not C | two_c is natural, style is not standard 2N Asks: how good is the weak two? [alert] [artificial] shows hcp>=13 when hcp>=20 | (x>=2, hcp>=15) | (x<=1, hcp>=18) | (x is H | x is S, x=2, hcp>=14, vul | !they.vul) | (x is H | x is S, x>=3, vul) | (x is H | x is S, x>=4, !they.vul) 3x Preemptive raise: four-card support shows x>=4, hcp<=11, hcp>=5 | shortest<=1 3x Preemptive raise: four-card support shows x>=4, hcp<=4 when !vul, !they.vul 4x Preemptive game raise: four trumps and a singleton shows x>=4, shortest<=1, hcp<=9 when !vul 4x Game in the fit shows x>=3, hcp=15..19 when x is H | x is S, vul | (!they.vul, hcp>=16 | x>=4) | hcp>=18 4x Game with five-card support shows x>=5, hcp=13..19 when x is H | x is S 3N To play: 16+, help in diamonds, the side suits stopped shows hcp>=16, x>=2, stop(S), stop(H), stop(C), H<=5, S<=5 when x is D 5x Game in diamonds: three-card support, 18-20 shows x>=3, hcp=18..20 when x is D 2H Natural, forcing: 5+ hearts, 13+ shows H>=5, hcp>=13 when x is D, H>=6 | hcp=14 2S Natural, forcing: 5+ spades, 13+ shows S>=5, hcp>=13 when x is D, S>=6 | hcp=14 2S Natural, forcing: 5+ spades, 13+ shows S>=5, hcp>=13, H<=1 when x is H P No interest shows hcp<=19 after 2x (P) 2y (P) when weak_two_suit(x), x is not C | two_c is natural, style is not standard 4y Three-card support: game shows y>=3 when y is H | y is S 3y Three-card support shows y>=3 3x No fit: rebid the suit shows y<=2 after 2x (P) 2y (P) 3x (P) when weak_two_suit(x), x is not C | two_c is natural, style is not standard, y is H | y is S 4y To play: 7+ {y} shows y>=7 4y To play: 6+ {y}, four top honours shows y>=6, top5(y)>=4, hcp>=16 3y Six-card suit, 19+: forcing, asks for a doubleton shows y>=6, hcp>=19 4x Game in partner's suit: 20+ shows hcp>=20 when x is H | x is S 3N Game in notrump: 20+, no fit shows hcp>=20 when x is D P No game shows hcp<=19 after 2x (P) 2y (P) 3x (P) 3y (P) when weak_two_suit(x), x is not C | two_c is natural, style is not standard, y is H | y is S 4y A doubleton: game in partner's suit shows y>=2 3N A singleton or void: 3NT shows y<=1 after (any auction) when asked weak_two(t), ask2nt is feature, style is not bba 3N Solid suit: AKQ shows has(A,t), has(K,t), has(Q,t) 3C Feature: the club ace or king, maximum shows has(A,C) | has(K,C), hcp>=8 when t is not C 3D Feature: the diamond ace or king, maximum shows has(A,D) | has(K,D), hcp>=8 when t is not D 3H Feature: the heart ace or king, maximum shows has(A,H) | has(K,H), hcp>=8 when t is not H 3S Feature: the spade ace or king, maximum shows has(A,S) | has(K,S), hcp>=8 when t is not S 3C Maximum: the club queen, no side ace or king shows has(Q,C), hcp>=8 when t is not C 3D Maximum: the diamond queen, no side ace or king shows has(Q,D), hcp>=8 when t is not D 3H Maximum: the heart queen, no side ace or king shows has(Q,H), hcp>=8 when t is not H 3S Maximum: the spade queen, no side ace or king shows has(Q,S), hcp>=8 when t is not S 3C Maximum: AK of the suit and the club jack shows has(A,t), has(K,t), has(J,C), hcp>=8 when t is not C 3D Maximum: AK of the suit and the diamond jack shows has(A,t), has(K,t), has(J,D), hcp>=8 when t is not D 3H Maximum: AK of the suit and the heart jack shows has(A,t), has(K,t), has(J,H), hcp>=8 when t is not H 3S Maximum: AK of the suit and the spade jack shows has(A,t), has(K,t), has(J,S), hcp>=8 when t is not S 3{t} Minimum, or nothing outside the suit shows hcp<=10 after (any auction) when asked weak_two(t), ask2nt is feature, style is bba 3C Feature: 8-10, A, Kx or Qxx in clubs shows hcp>=8, has(A,C) | (has(K,C), C>=2) | (has(Q,C), C>=3) when t is not C 3D Feature: 8-10, A, Kx or Qxx in diamonds shows hcp>=8, has(A,D) | (has(K,D), D>=2) | (has(Q,D), D>=3) when t is not D 3H Feature: 8-10, A, Kx or Qxx in hearts shows hcp>=8, has(A,H) | (has(K,H), H>=2) | (has(Q,H), H>=3) when t is not H 3S Feature: 8-10, A, Kx or Qxx in spades shows hcp>=8, has(A,S) | (has(K,S), S>=2) | (has(Q,S), S>=3) when t is not S 3N Maximum: 8-10, no side feature shows hcp>=8 3{t} Minimum, 5-7 shows hcp<=7 after (any auction) when asked weak_two(t), ask2nt is ogust 3C Ogust: minimum, poor suit [artificial] shows hcp<=7, quality(t)<=1 3D Ogust: minimum, good suit [artificial] shows hcp<=7, quality(t)>=2 3H Ogust: maximum, poor suit [artificial] shows hcp>=8, quality(t)<=1 3S Ogust: maximum, good suit [artificial] shows hcp>=8, quality(t)>=2 3N Ogust: the top three honours shows quality(t)=3 after 2x (P) 2N (P) 3N (P) 4x (P) when weak_two_suit(x), x is C | x is D, style is bba 5x A shortness: game in the minor shows shortest<=1 P No shortness: play four shows shortest>=2 after (any auction) when answered weak_two(t), style is bba, !partner.last=3{t} 4{t} Game: to play shows hcp>=13 when t is H | t is S 3N Game: to play shows hcp>=13 when t is C | t is D, !partner.last=3N P To play: 3NT shows hcp>=17 when t is C | t is D, partner.last=3N 4{t} Doubt about 3NT: 15-16 shows hcp<=16 when t is C | t is D, partner.last=3N after (any auction) when answered weak_two(t) 4N Keycard ask in {t} [artificial] shows w2_fit_slam(t) when k1430 | k0314 4N Blackwood: aces, {t} agreed [artificial] shows w2_fit_slam(t) when aces, !k1430, !k0314 3S Natural: five or more spades, slam interest shows S>=5, S>=H, t<=1, hcp+partner.hcp.min>=27 when t is not S, partner.last=3C | partner.last=3D | partner.last=3H 3H Natural: five or more hearts, slam interest shows H>=5, H>S, t<=1, hcp+partner.hcp.min>=27 when t is not H, partner.last=3C | partner.last=3D 4{t} Game in the weak two suit shows hcp>=17 when t is H | t is S 3N Game in notrump shows hcp>=17 when t is C | t is D 4{t} Game: to play shows hcp+partner.hcp.min>=21 when t is H | t is S 3N Game: to play shows hcp+partner.hcp.min>=21 when t is C | t is D P To play when partner.last=3{t} 4{t} Sign off in {t} shows hcp<=16 when partner.last=3N, t is H | t is S 3{t} Sign off in {t} shows hcp<=16 3N To play in 3NT shows hcp<=16 4{t} Sign off in {t} shows hcp<=16 when t is H | t is S P No game shows hcp<=16 after 2x (P) 2N (P) 3y (P) 3x (P) when weak_two_suit(x), x is not C | two_c is natural, y is not x P No further bid after 2x (P) 2N (P) 3y (P) 3z (P) when weak_two_suit(x), x is not C | two_c is natural, z is H | z is S, z is not x, y is not z 4z Three-card support: agrees {z} shows z>=3 3N No support for {z} shows z<=2 after 2x (P) 2N (P) 3y (P) 3z (P) 3N (P) when weak_two_suit(x), x is not C | two_c is natural, z is H | z is S, z is not x, y is not z 6N Slam in notrump shows hcp+partner.hcp.min>=33 4z Six-card suit: game in it shows z>=6 P To play after 2x (P) 3x (P) when weak_two_suit(x), x is not C | two_c is natural P No further bid == wolff: Wolff sign-off after opener's 2NT rebid file: conventions/base/wolff.bid card: other_conventions.wolff_signoff.play needs: base skills: bidding_conventions/wolff_signoff after 1x (P) 1y (P) 2N (P) when !tw(x) 3C Wolff: relay to 3♦, to sign off [alert] [artificial] shows points<=6, D>=6 | (y>=6, y is H) | (y>=6, y is S) when y is not C after (any auction) when asked wolff 3D Wolff: the forced 3♦ [alert] [artificial] after (any auction) when answered wolff, partner.last=3D P To play in 3♦ shows D>=6 3y To play in {y} shows y>=6 when y is H | y is S == xyz: XYZ: 2♣ relay and 2♦ game force after three one-level bids file: conventions/base/xyz.bid card: other_conventions.xyz needs: two-way-nmf skills: bidding_conventions/xyz after 1x (P) 1y (P) 1z (P) when !tw(x) 2C XYZ: relay to 2♦, invitational or a diamond sign-off [alert] [artificial] shows points=11..12 | (points<=10, D>=6 | (x is D, D>=4, z<=2)) 2D XYZ: artificial game force [alert] [artificial] shows points>=13 2N XYZ: relay to 3♣, a club sign-off [alert] [artificial] shows points<=10, C>=6 | (x is C, C>=5, z<=2) after 1x (P) 1y (P) 1z (P) 2C (P) 2D (P) when !tw(x) P To play in 2♦ shows points<=10 2y Invitational: five {y} shows y=5, points=11..12 when y is H | y is S 3y Invitational: six {y} shows y>=6, points=11..12 3z Invitational raise: four {z} shows z>=4, tp(z)=11..12 2N Invitational, balanced shows points=11..12, z<=3 3x Invitational: four {x} shows x>=4, points=11..12, z<=3 when x is C | x is D after 1x (P) 1y (P) 1z (P) 2N (P) 3C (P) when !tw(x) P To play in 3♣ shows C>=4 == advances: Advancing partner's overcall file: conventions/competitive/advances.bid needs: base, overcalls skills: competitive_bidding/advancing_overcalls, competitive_bidding/support_cuebids, competitive_bidding/mixed_raise after (1x) 1y (P) 2{y} Raise: 8-11 with three {y}, up to 11 with four shows y>=3, hcp+length_points<=11, hcp+length_points>=8 | y>=4 3{y} Preemptive raise: five {y}, four at favourable; under 8 points shows y>=4, hcp+length_points<=7, weak_jump_raise(y) when jump_raise is weak 1S 8+ total points, four or more spades shows S>=4, hcp+length_points>=8 when x is not S, y is not S 1N 8-11 total points, balanced, a stopper in {x} shows balanced, hcp+length_points>=8, hcp+length_points<=11 when stop(x), S<=3 | x is S | y is S, H<=3 | x is H | y is H, y<=2 | y is C | y is D cheapest(C) 9+ total points, five or more clubs shows C>=5, hcp+length_points>=9 when x is not C, y is not C cheapest(D) 9+ total points, five or more diamonds shows D>=5, hcp+length_points>=9 when x is not D, y is not D cheapest(H) 9+ total points, five or more hearts shows H>=5, hcp+length_points>=9 when x is not H, y is not H 2{x} Cue bid: limit raise or better in {y} [alert] [artificial] shows y>=3, hcp+length_points>=12 2N 12-15 total points, balanced, a stopper in {x} shows balanced, hcp+length_points>=12, hcp+length_points<=15 when stop(x), y<=2 3{x} Mixed raise: 4+ {y}, 7-9 support points [alert] [artificial] shows y>=4, tp(y)=7..9 when mixed, !vul P Not enough to advance after (1x) P (P) 1y (P) 2{y} Raise: 9-11 total points, three-card support shows y>=3, hcp+length_points>=9, hcp+length_points<=11 3{y} Preemptive raise: four-card support, under 9 points shows y>=4, hcp+length_points<=8 when jump_raise is weak 1S 7+ total points, four or more spades shows S>=4, hcp+length_points>=7 when x is not S, y is not S 1N 10-11 total points, balanced, a stopper in {x} shows balanced, hcp+length_points>=10, hcp+length_points<=11 when stop(x), S<=3 | x is S | y is S, H<=3 | x is H | y is H, y<=2 | y is C | y is D cheapest(C) 11+ total points, five or more clubs shows C>=5, hcp+length_points>=11 when x is not C, y is not C cheapest(D) 11+ total points, five or more diamonds shows D>=5, hcp+length_points>=11 when x is not D, y is not D cheapest(H) 11+ total points, five or more hearts shows H>=5, hcp+length_points>=11 when x is not H, y is not H 2{x} Cue bid: limit raise or better in {y} [alert] [artificial] shows y>=3, hcp+length_points>=13 2N 13-15 total points, balanced, a stopper in {x} shows balanced, hcp+length_points>=13, hcp+length_points<=15 when stop(x), y<=2 P Not enough to advance a reopening bid after (1x) 1y (X) | (1x) P (P) 1y (X) 2{y} Raise: 8-11 with three {y}, up to 11 with four shows y>=3, hcp+length_points<=11, hcp+length_points>=8 | y>=4 3{y} Preemptive raise: five {y}, four at favourable; under 8 points shows y>=4, hcp+length_points<=7, weak_jump_raise(y) P Not enough to advance after (1x) 1y (1z) | (1x) P (P) 1y (1z) 2{y} Raise: 8-11 with three {y}, up to 11 with four shows y>=3, hcp+length_points<=11, hcp+length_points>=8 | y>=4 3{y} Preemptive raise: five {y}, four at favourable; under 8 points shows y>=4, hcp+length_points<=7, weak_jump_raise(y) 1N 8-11 total points, balanced, a stopper in {x} shows balanced, hcp+length_points>=8, hcp+length_points<=11 when stop(x), y<=2 cheapest(S) Free bid: 9+ total points, five or more spades shows S>=5, hcp+length_points>=9 when x is not S, y is not S, z is not S cheapest(H) Free bid: 9+ total points, five or more hearts shows H>=5, S<=4, hcp+length_points>=9 when x is not H, y is not H, z is not H P Not enough to advance after (1x) 1y (X) | (1x) 1y (1z) 3{x} Mixed raise: 4+ {y}, 7-9 support points [alert] [artificial] shows y>=4, tp(y)=7..9 when mixed, !vul after (1x) 1y (2z) | (1x) P (P) 1y (2z) 2{y} Raise: 7-11 total points, three-card support shows y>=3, hcp+length_points>=7, hcp+length_points<=11 3{y} Raise: four-card support, 8-11 total points shows y>=4, hcp+length_points>=8, hcp+length_points<=11 P Not enough to advance after (1x) 2y (*) | (1x) P (P) 2y (*) when y is not x P Not enough to advance after (1x) 2y (P) | (1x) 2y (X) | (1x) 2y (2x) when y is not x, x is C | (x is D, y is not C) | (x is H, y is S) 4{y} Raise to game: four-card support, 11+ shows y>=4, hcp+length_points>=11 when y is H | y is S 3{y} Preemptive raise: three-card support, under 11 points shows y>=3, hcp+length_points<=10 when y is H | y is S 3{y} Preemptive raise: four-card support, under 11 points shows y>=4, hcp+length_points<=10 when y is C | y is D after (1x) 2y (P) | (1x) 2y (X) | (1x) 2y (2x) when y is not x, x is S | (x is H, y is not S) | (x is D, y is C) 4{y} Raise to game in partner's major: four-card support, 13+ shows y>=4, hcp+length_points>=13 when y is H | y is S 3{y} Raise: 7-10 total points, four-card support shows y>=4, hcp+length_points>=7, hcp+length_points<=10 cheapest(x) Cue bid: limit raise or better in {y} [alert] [artificial] shows y>=3, hcp+length_points>=11 2N 11-12 total points, balanced, a stopper in {x} shows balanced, hcp+length_points>=11, hcp+length_points<=12 when stop(x), y<=2 3N 13+ total points, balanced, a stopper in {x} shows balanced, hcp+length_points>=13 when stop(x), y<=2 cheapest(S) 10+ total points, five or more spades shows S>=5, hcp+length_points>=10 when x is not S, y is not S cheapest(H) 10+ total points, five or more hearts shows H>=5, S<=4, hcp+length_points>=10 when x is not H, y is not H cheapest(D) 12+ total points, five or more diamonds shows D>=5, S<=4, H<=4, hcp+length_points>=12 when x is not D, y is not D cheapest(C) 12+ total points, five or more clubs shows C>=5, S<=4, H<=4, hcp+length_points>=12 when x is not C, y is not C after (1x) 1y (1N) | (1x) P (P) 1y (1N) 2{y} Raise: 9-11 total points, three-card support shows y>=3, hcp+length_points>=9, hcp+length_points<=11 cheapest(x) Cue bid: limit raise or better in {y} [alert] [artificial] shows y>=3, hcp+length_points>=12 P Not enough to advance after (any auction) when asked cue_raise(t) 4{t} Accepts: game in {t} shows hcp+length_points>=13 when t is H | t is S 3N Accepts: 13+ balanced, game in notrump shows balanced, hcp+length_points>=13 when t is C | t is D cheapest(t) Minimum: signs off after (1x) 1y (P) 3x (P) | (1x) 1y (X) 3x (P) | (1x) 1y (1z) 3x (P) 4{y} Accepts: game in {y} shows hcp+length_points>=16 when mixed, y is H | y is S 3N Accepts: 16+ balanced, game in notrump shows balanced, hcp+length_points>=16, stop(x) when mixed, y is C | y is D 3{y} Minimum: signs off when mixed after (1x) 1y (P) 1z (P) 2{z} Four-card support shows z>=4 2{y} Six or more {y} shows y>=6, z<=3 1N 11-14 balanced, {x} held shows balanced, hcp>=11, hcp<=14, stop(x), z<=3 P No further bid after (1x) 1y (P) 2z (P) 3{z} Four-card support shows z>=4, hcp>=11 2{y} Six or more {y} shows y>=6, z<=3 when y is not C P No further bid after (1x) 1y (2x) P (P) 2{y} Competes: six or more {y} shows y>=6, hcp>=10 P No further bid after (1x) P (1y) 1z (*) | (1x) P (1y) 2z (*) when z is not x, z is not y cheapest(z) Raise: three-card support, 7+ total points shows z>=3, hcp+length_points>=7 when cheapest_rank(z)<=13 cheapest(z) Competitive raise to three: four-card support shows z>=4, hcp+length_points>=6 when cheapest_rank(z)>=15, cheapest_rank(z)<=18 jump(z) Preemptive raise: four-card support, weak shows z>=4, hcp+length_points<=7, weak_jump_raise(z) when cheapest_rank(z)<=13, rho.last=P | rho.last=X P Not enough to advance after (1x) P (1y) X (P) when y is not x cheapest(S) Answers the double: four or more spades shows S>=4, S>=H | x is H | y is H, S>=D | x is D | y is D, S>=C | x is C | y is C, hcp<=8 when x is not S, y is not S cheapest(H) Answers the double: four or more hearts shows H>=4, H>S | x is S | y is S, H>=D | x is D | y is D, H>=C | x is C | y is C, hcp<=8 when x is not H, y is not H cheapest(D) Answers the double: four or more diamonds shows D>=4, D>S | x is S | y is S, D>H | x is H | y is H, D>=C | x is C | y is C, hcp<=8 when x is not D, y is not D cheapest(C) Answers the double: four or more clubs shows C>=4, C>S | x is S | y is S, C>H | x is H | y is H, C>D | x is D | y is D, hcp<=8 when x is not C, y is not C jump(S) Jump answer: four or more spades, 9-11 shows S>=4, S>=H | x is H | y is H, hcp>=9 when x is not S, y is not S jump(H) Jump answer: four or more hearts, 9-11 shows H>=4, H>S | x is S | y is S, hcp>=9 when x is not H, y is not H jump(D) Jump answer: four or more diamonds, 9-11 shows D>=4, D>S | x is S | y is S, D>H | x is H | y is H, hcp>=9 when x is not D, y is not D, cheapest_rank(D)<=13 jump(C) Jump answer: four or more clubs, 9-11 shows C>=4, C>S | x is S | y is S, C>H | x is H | y is H, C>D | x is D | y is D, hcp>=9 when x is not C, y is not C, cheapest_rank(C)<=13 1N 6-10, both their suits stopped shows hcp>=6, hcp<=10, stop(x), stop(y) cheapest(S) Answers the double: three spades shows S>=3, S>=H | x is H | y is H, S>=D | x is D | y is D, S>=C | x is C | y is C when x is not S, y is not S cheapest(H) Answers the double: three hearts shows H>=3, H>=D | x is D | y is D, H>=C | x is C | y is C when x is not H, y is not H cheapest(D) Answers the double: the longer unbid suit when x is not D, y is not D cheapest(C) Answers the double: the longer unbid suit when x is not C, y is not C after (1x) P (1y) X (*) when y is not x, !rho.last=P cheapest(S) Free bid: four or more spades shows S>=4, hcp+length_points>=7 when x is not S, y is not S, cheapest_rank(S)<=13 cheapest(H) Free bid: four or more hearts shows H>=4, S<=H | x is S | y is S, hcp+length_points>=7 when x is not H, y is not H, cheapest_rank(H)<=13 cheapest(D) Free bid: five or more diamonds shows D>=5, hcp+length_points>=7 when x is not D, y is not D, cheapest_rank(D)<=13 cheapest(C) Free bid: five or more clubs shows C>=5, hcp+length_points>=7 when x is not C, y is not C, cheapest_rank(C)<=13 P Not enough to advance after (1N) 2y (*) | (1N) 3y (*) P Not enough to advance after (any auction) when lho.opened | rho.opened P No further bid when !passes_out_artificial == after-interference: Our side once the opponents come in file: conventions/competitive/after-interference.bid needs: base skills: competitive_bidding/negative_doubles, partnership_bidding/negative_doubles, competitive_bidding/support_cuebids after 1x (1y) when neg X Negative double: 6+ total points, the unbid suits [alert] [artificial] shows hcp+length_points>=6, S>=4 | x is S | y is S, H>=4 | x is H | y is H, (D>=4 | x is D | y is D, C>=4 | x is C | y is C) | S>=4 | H>=4 when S<=4 | x is S | y is S, H<=4 | x is H | y is H | (y is S, hcp<=7), x<=2 | x is C | x is D after 1x (1y) | 1x (2y) when y is not x, neg P No suitable bid when y>=4, quality(y)>=good | top5(y)>=3, hcp>=8, x<=2 after 1x (1y) 1S 6+ total points, four or more spades shows S>=4, hcp+length_points>=6 when x is not S, y is not S, S>=5 | (x is not H, y is not H, H<=3) 1H 6+ total points, four or more hearts shows H>=4, hcp+length_points>=6 when x is not H, y is not H, y is not S, H>=5 | (x is not S, y is not S, S<=3) 1N 6-10 total points, balanced, a stopper in {y} shows balanced, hcp+length_points>=6, hcp+length_points<=10 when stop(y), S<=3 | x is S | y is S, H<=3 | x is H | y is H 2{x} Raise: 6-9 total points, support for partner's suit shows x>=3, hcp+length_points>=6, hcp+length_points<=9, minor_raise(x) when S<=3 | x is S | y is S, H<=3 | x is H | y is H jump(x) Preemptive raise: five-card support, six in a minor, under 8 shows x>=5, hcp+length_points<=7, minor_preempt(x) cheapest(C) 8+ total points, five or more clubs shows C>=5, hcp+length_points>=8 when x is not C, y is not C, new_suit_forcing cheapest(D) 8+ total points, five or more diamonds shows D>=5, hcp+length_points>=8 when x is not D, y is not D, new_suit_forcing 2H 8+ total points, five or more hearts shows H>=5, hcp+length_points>=8 when y is S, x is not H, new_suit_forcing cheapest(C) 8-12 total points, five or more clubs, not forcing shows C>=5, hcp+length_points>=8, hcp<=12 when x is not C, y is not C, !new_suit_forcing cheapest(D) 8-12 total points, five or more diamonds, not forcing shows D>=5, hcp+length_points>=8, hcp<=12 when x is not D, y is not D, !new_suit_forcing 2H 8-12 total points, five or more hearts, not forcing shows H>=5, hcp+length_points>=8, hcp<=12 when y is S, x is not H, !new_suit_forcing jump(C) 13+ total points, five or more clubs: forcing to game shows C>=5, hcp>=13 when x is not C, y is not C, !new_suit_forcing, js is strong, H<=4 | y is not S | x is H jump(D) 13+ total points, five or more diamonds: forcing to game shows D>=5, hcp>=13 when x is not D, y is not D, !new_suit_forcing, js is strong, H<=4 | y is not S | x is H 3H 13+ total points, five or more hearts: forcing to game shows H>=5, hcp>=13 when y is S, x is not H, !new_suit_forcing, js is strong cheapest(y) Cue bid: limit raise or better in {x} [alert] [artificial] shows x>=3, hcp+length_points>=11 when cue_raise, x is H | x is S | x>=4 2N 11-12 total points, balanced, a stopper in {y} shows balanced, hcp+length_points>=11, hcp+length_points<=12 when stop(y), S<=3 | x is S | y is S, H<=3 | x is H | y is H 3N 13+ total points, balanced, a stopper in {y} shows balanced, hcp+length_points>=13 when stop(y), S<=3 | x is S | y is S, H<=3 | x is H | y is H P No suitable bid after 1x (1y) 2y (3y) when y is not x 4{x} Game: 16+ shows hcp>=16 when x is H | x is S 3N Game: 16+ with a stopper in {y} shows hcp>=16, stop(y) when x is C | x is D 5{x} Game: 16+, no stopper in {y} shows hcp>=16 when x is C | x is D 4{x} Competes: five or more {x} shows x>=5 when x is C | x is D P No game after 1x (1y) 2y (3y) P (P) when y is not x 4{x} Game: 13+ shows hcp+length_points>=13 when x is H | x is S 3N Game: 13+ with a stopper in {y} shows hcp+length_points>=13, stop(y) when x is C | x is D 5{x} Game in the minor: 14+ shows hcp+length_points>=14 when x is C | x is D P Limit raise only after 1x (1y) 2y (3y) 4x (P) when x is C | x is D, y is not x 5{x} Game in the minor: 13+ shows hcp+length_points>=13 P Limit raise only after 1x (1y) when y is not x, js is weak, !passed_hand | !fsj jump(S) Weak jump shift: six or more spades, 2-7 HCP shows S>=6, hcp=2..7 when x is not S, y is not S, cheapest_rank(S)<=8, x<=2 | x is C | x is D jump(H) Weak jump shift: six or more hearts, 2-7 HCP shows H>=6, hcp=2..7 when x is not H, y is not H, cheapest_rank(H)<=8, x<=2 | x is C | x is D after 1x (1y) 2z (P) when partner.jumped, js is weak, z is not x, z is not y P No further bid after 1x (2y) | 1x (3y) when y is not x X Negative double: 8+ total points, the unbid suits [alert] [artificial] shows hcp+length_points>=8, S>=4 | x is S | y is S, H>=4 | x is H | y is H, (D>=4 | x is D | y is D, C>=4 | x is C | y is C) | S>=4 | H>=4 when S<=4 | x is S | y is S, H<=4 | x is H | y is H, neg cheapest(y) Cue bid: limit raise or better in {x} [alert] [artificial] shows x>=3, hcp+length_points>=11 when cue_raise cheapest(x) Raise: 7-10, three-card support, five in a minor shows x>=3, hcp+length_points>=7, hcp+length_points<=10, minor_raise(x) cheapest(S) 10+ total points, five or more spades shows S>=5, hcp+length_points>=10 when x is not S, y is not S, new_suit_forcing cheapest(H) 10+ total points, five or more hearts shows H>=5, S<=4, hcp+length_points>=10 when x is not H, y is not H, new_suit_forcing cheapest(D) 10+ total points, five or more diamonds shows D>=5, S<=4, H<=4, hcp+length_points>=10 when x is not D, y is not D, new_suit_forcing cheapest(C) 10+ total points, five or more clubs shows C>=5, S<=4, H<=4, hcp+length_points>=10 when x is not C, y is not C, new_suit_forcing after 1x (2y) | 1x (3y) when y is not x, !new_suit_forcing cheapest(S) 10+ total points, five or more spades, not forcing shows S>=5, hcp+length_points>=10, hcp<=12 when x is not S, y is not S cheapest(H) 10+ total points, five or more hearts, not forcing shows H>=5, S<=4, hcp+length_points>=10, hcp<=12 when x is not H, y is not H cheapest(D) 10+ total points, five or more diamonds, not forcing shows D>=5, S<=4, H<=4, hcp+length_points>=10, hcp<=12 when x is not D, y is not D cheapest(C) 10+ total points, five or more clubs, not forcing shows C>=5, S<=4, H<=4, hcp+length_points>=10, hcp<=12 when x is not C, y is not C jump(S) 13+ total points, five or more spades: forcing to game shows S>=5, hcp>=13 when x is not S, y is not S jump(H) 13+ total points, five or more hearts: forcing to game shows H>=5, S<=4, hcp>=13 when x is not H, y is not H jump(D) 13+ total points, five or more diamonds: forcing to game shows D>=5, S<=4, H<=4, hcp>=13 when x is not D, y is not D jump(C) 13+ total points, five or more clubs: forcing to game shows C>=5, S<=4, H<=4, hcp>=13 when x is not C, y is not C after 1x (1y) 2z (P) | 1x (1y) 3z (P) | 1x (2y) 3z (P) when partner.jumped, z is not x, z is not y, we.forcing=game 4{z} Three-card support: game shows z>=3 when z is H | z is S 3N No fit, a stopper in {y} shows stop(y) after 1x (2y) | 1x (3y) when y is not x 2N 11-12 total points, balanced, a stopper in {y} shows balanced, hcp+length_points>=11, hcp+length_points<=12 when stop(y) 3N 13+ total points, balanced, a stopper in {y} shows balanced, hcp+length_points>=13 when stop(y) P No suitable bid after 1x (X) XX Redouble: 10+ total points [alert] [artificial] shows hcp+length_points>=10 when S<=4 | x is S | hcp>=12, H<=4 | x is H | x is S | hcp>=12 cheapest(S) 6-9 total points, four or more spades, or 10-11 with five shows S>=4, S>H, hcp+length_points>=6, hcp+length_points<=9 | (S>=5, hcp<=11) when x is not S cheapest(H) 6-9 total points, four or more hearts, or 10-11 with five shows H>=4, H>=S, hcp+length_points>=6, hcp+length_points<=9 | (H>=5, hcp<=11) when x is not H, x is not S cheapest(D) 6-9 total points, four or more diamonds shows D>=4, S<=3, H<=3, hcp+length_points>=6, hcp+length_points<=9 when x is not D, x is not H, x is not S 2{x} Raise: 4-9 total points, support for partner's suit shows x>=3, hcp+length_points>=4, hcp+length_points<=9 when x is H | x is S | x>=5, S<=3 | x is S | x is H, H<=3 | x is H | x is S 3{x} Preemptive raise: five-card support for a major, less than 8 shows x>=5, hcp+length_points<=7 when x is H | x is S 1N 6-9 total points, balanced shows balanced, hcp+length_points>=6, hcp+length_points<=9 when S<=3 | x is S, H<=3 | x is H, x<=2 | x is C | x is D, !tfr | x is C | x is D P No suitable bid after 1x (1y) X (P) | 1x (2y) X (P) | 1x (3y) X (P) cheapest(S) Four spades, minimum shows S>=4, tp(S)<=15 when x is not S, y is not S cheapest(H) Four hearts, minimum shows H>=4, tp(H)<=15 when x is not H, y is not H jump(S) Four spades, 16-18 shows S>=4, tp(S)=16..18 when x is not S, y is not S jump(H) Four hearts, 16-18 shows H>=4, tp(H)=16..18 when x is not H, y is not H cheapest(N) 12-14 balanced with a stopper in {y} shows balanced, hcp<=14 when stop(y) jump(N) 18-19 balanced with a stopper in {y} shows balanced, hcp=18..19 when nt_jump_to_game, stop(y) cheapest(x) Rebids {x}: six or more, minimum shows x>=6, hcp<=15 when x is H | x is S cheapest(x) Rebids {x}: five or more, minimum shows x>=5, hcp<=15 when x is C | x is D, x>=6 jump(x) Six cards in {x}, 16-18 shows x>=6, hcp=16..18 4S Game: four spades, 19+ shows S>=4, tp(S)>=19 when x is not S, y is not S 4H Game: four hearts, 19+ shows H>=4, tp(H)>=19 when x is not H, y is not H cheapest(D) Four diamonds, minimum shows D>=4, hcp<=15 when x is not D, y is not D, S<=3 | x is S | y is S, H<=3 | x is H | y is H cheapest(C) Four clubs, minimum shows C>=4, C>=D, hcp<=15 when x is not C, y is not C, S<=3 | x is S | y is S, H<=3 | x is H | y is H cheapest(S) Three spades, minimum shows S>=3, hcp<=15 when x is not S, y is not S, partner.S>=4 cheapest(H) Three hearts, minimum shows H>=3, hcp<=15 when x is not H, y is not H, partner.H>=4 cheapest(x) Rebids {x}: five cards, minimum shows x>=5, hcp<=15 3N Game: 17+ with a stopper in {y} shows hcp>=17, stop(y) when lho.last=1{y} | lho.last=2{y} cheapest(y) Cue bid: 17+, forcing to game [alert] [artificial] shows hcp>=17 when lho.last=1{y} | lho.last=2{y} cheapest(x) Rebids {x}: no better bid after 1x (1y) 2y (P) | 1x (2y) 3y (P) | 1x (3y) 4y (P) when y is not x 4{x} Accepts: game in {x} shows tp(x)>=14 when x is H | x is S 3N Accepts: 14+ with a stopper in {y} shows hcp>=14 when stop(y), x is C | x is D 5{x} Accepts: 16+, no stopper in {y} shows hcp>=16 when x is C | x is D cheapest(x) Minimum: signs off after 1x (1y) 2y (P) 3x (P) | 1x (2y) 3y (P) 3x (P) | 1x (2y) 3y (P) 4x (P) when x is C | x is D, y is not x 3N Game: 13+ with a stopper in {y} shows hcp+length_points>=13, stop(y) 5{x} Game in the minor: 14+ shows hcp+length_points>=14 P Limit raise only after 1x (2y) 3y (P) 4x (P) when x is H | x is S, y is not x P Game reached after 1x (1y) 2y (P) 2x (P) | 1x (1y) 2y (P) 3x (P) | 1x (2y) 3y (P) 3x (P) when x is H | x is S, y is not x 4{x} Game: 13+ shows hcp+length_points>=13 P Limit raise only after 1x (1y) X (2z) | 1x (2y) X (3z) when y is not x cheapest(S) Four spades, minimum shows S>=4, tp(S)<=15 when x is not S, y is not S cheapest(H) Four hearts, minimum shows H>=4, tp(H)<=15 when x is not H, y is not H jump(S) Four spades, 16-18 shows S>=4, tp(S)=16..18 when x is not S, y is not S jump(H) Four hearts, 16-18 shows H>=4, tp(H)=16..18 when x is not H, y is not H cheapest(N) 12-15 balanced with a stopper in {y} shows balanced, hcp<=15 when stop(y) jump(N) 18-19 balanced with a stopper in {y} shows balanced, hcp=18..19 when nt_jump_to_game, stop(y) cheapest(x) Six or more {x}, 13+ shows x>=6, hcp>=13 P No further bid after 1x (1y) X (3z) | 1x (1y) X (4z) | 1x (2y) X (4z) | 1x (3y) X (4z) when y is not x cheapest(S) Four spades, 13+ shows S>=4, hcp>=13 when x is not S, y is not S cheapest(H) Four hearts, 13+ shows H>=4, hcp>=13 when x is not H, y is not H cheapest(N) 13+ balanced with a stopper in {y} shows balanced, hcp>=13 when stop(y) P No further bid after (any auction) when they.bid, !lho.opened, !rho.opened, me.last=P P No further bid when !passes_out_artificial after (any auction) when they.bid, !lho.opened, !rho.opened, partner.last=P P No further bid when !passes_out_artificial after 1x (1y) P (P) X (P) 2z (P) | 1x (1y) P (P) X (P) 3z (P) | 1x (2y) P (P) X (P) 2z (P) | 1x (2y) P (P) X (P) 3z (P) | 1x (3y) P (P) X (P) 3z (P) | 1x (3y) P (P) X (P) 4z (P) when y is not x, z is not y 3N Game: 18+ with a stopper in {y} shows hcp>=18, stop(y) P No game == balancing: The balancing seat file: conventions/competitive/balancing.bid needs: base, overcalls skills: competitive_bidding/balancing after (1x) P (P) X Reopening double: 8+ total points and the unbid suits shows hcp+length_points>=8, (S>=3 | x is S, H>=3 | x is H, D>=3 | x is D, C>=3 | x is C) | hcp+length_points>=oc_max+1 1S Reopening: five spades, 8-15 total points shows S>=5, S>=H, S>=D, S>=C, hcp+length_points>=one_min, hcp+length_points<=15 when x is not S 1H Reopening: five hearts, 8-15 total points shows H>=5, H>S, H>=D, H>=C, hcp+length_points>=one_min, hcp+length_points<=15 when x is not H 1D Reopening: five diamonds, 8-15 total points shows D>=5, D>S, D>H, D>=C, hcp+length_points>=one_min, hcp+length_points<=15 when x is not D 2C Reopening: five clubs, 10-15 total points shows C>=5, C>S, C>H, C>D, hcp+length_points>=two_min-2, hcp+length_points<=15 when x is not C 2D Reopening: five diamonds, 10-15 total points shows D>=5, D>S, D>H, D>=C, hcp+length_points>=two_min-2, hcp+length_points<=15 when x is not D, x is not C 2H Reopening: five hearts, 10-15 total points shows H>=5, H>S, H>=D, H>=C, hcp+length_points>=two_min-2, hcp+length_points<=15 when x is not H, x is not D, x is not C 1N Balancing notrump: {nt_min}-{nt_max} balanced with a stopper in {x} shows balanced, hcp>=nt_min, hcp<=nt_max when stop(x) 2N 19-21 balanced with a stopper in {x} shows balanced, hcp=19..21 when stop(x) P Nothing to reopen with == cappelletti: Cappelletti and Modified Cappelletti over their 1NT file: conventions/competitive/cappelletti.bid needs: vs-1nt skills: competitive_bidding/cappelletti, competitive_bidding/modified_cappelletti, competitive_bidding/defense_vs_1nt after (1N) | (1N) P (P) when def is cappelletti | def is modified_cappelletti X Penalty: 15+ HCP shows hcp>=15 2D Cappelletti: both majors, 5-4 or longer [alert] shows H>=4, S>=4, H+S>=9, hcp+length_points>=10, hcp<=17 when system is not brill 2N Cappelletti: both minors, 5-5 or longer [alert] shows C>=5, D>=5, hcp+length_points>=8, hcp<=17 when system is not brill after (1N) | (1N) P (P) when def is cappelletti | def is modified_cappelletti, system is brill 2D Cappelletti: both majors, 5-5 or longer, 10+ HCP [alert] shows H>=5, S>=5, hcp>=10, hcp<=17 2N Cappelletti: both minors, 5-5 or longer, 10+ HCP [alert] shows C>=5, D>=5, hcp>=10, hcp<=17 after (1N) | (1N) P (P) when def is cappelletti 2C Cappelletti: one long suit, six or more [alert] shows longest>=6, second_longest<=4, hcp+length_points>=12, hcp<=17 | (system is brill, hcp<=18), hcp>=10 | system is not brill 2H Cappelletti: five hearts and a four-card minor [alert] shows H>=5, S<=3, (C>=4, quality(C)>=fair) | (D>=4, quality(D)>=fair), hcp+length_points>=10, hcp<=17, hcp>=10 | system is not brill 2S Cappelletti: five spades and a four-card minor [alert] shows S>=5, H<=3, (C>=4, quality(C)>=fair) | (D>=4, quality(D)>=fair), hcp+length_points>=10, hcp<=17, hcp>=10 | system is not brill after (any auction) when asked capp_one, rho.last=P | rho.last=X 2D Relay: bid your suit [alert] P Long clubs: to play shows C>=6 2H Six or more hearts: to play shows H>=6, hcp<=12 2S Six or more spades: to play shows S>=6, hcp<=12 after (any auction) when asked capp_relay, rho.last=P | rho.last=X P My suit is diamonds shows D>=6 2H My suit is hearts shows H>=6 2S My suit is spades shows S>=6 3C My suit is clubs shows C>=6 after (1N) | (1N) P (P) when def is modified_cappelletti 2C Modified Cappelletti: a long minor, or a major and a minor [alert] shows (C>=6 | D>=6, second_longest<=4, hcp+length_points>=12) | ((H>=5, S<=3) | (S>=5, H<=3), C>=4 | D>=4, hcp+length_points>=10), hcp<=17 2H Modified Cappelletti: six or more hearts [alert] shows H>=6, second_longest<=4, hcp+length_points>=12, hcp<=17 2S Modified Cappelletti: six or more spades [alert] shows S>=6, second_longest<=4, hcp+length_points>=12, hcp<=17 after (any auction) when asked mcapp_one, rho.last=P | rho.last=X 2D Relay: show your hand [alert] after (any auction) when asked mcapp_relay, rho.last=P | rho.last=X P Long diamonds shows D>=6 2H Hearts and a minor shows H>=5, C>=4 | D>=4 2S Spades and a minor shows S>=5, C>=4 | D>=4 3C Long clubs shows C>=6 == dont: DONT over their 1NT file: conventions/competitive/dont.bid needs: vs-1nt skills: competitive_bidding/dont, competitive_bidding/defense_vs_1nt define dont_strength = hcp<=15 | (hcp<=19, longest+second_longest>=10 | longest>=7) after (1N) | (1N) P (P) when def is dont | (dont_play, def is other) X DONT: one long suit, not spades [alert] shows C>=6 | D>=6 | H>=6, second_longest<=3, hcp+length_points>=10, dont_strength 2C DONT: clubs and a higher suit [alert] shows (C>=5, D>=4 | H>=4 | S>=4) | (C>=4, D>=5 | H>=5 | S>=5), hcp+length_points>=10, dont_strength 2D DONT: diamonds and a major [alert] shows (D>=5, H>=4 | S>=4) | (D>=4, H>=5 | S>=5), hcp+length_points>=10, dont_strength 2H DONT: hearts and spades [alert] shows H>=4, S>=4, H+S>=9, hcp+length_points>=10, dont_strength 2S DONT: six or more spades shows S>=6, second_longest<=4, hcp+length_points>=10, dont_strength after (any auction) when asked dont_one, rho.last=P | rho.last=X | rho.last=XX 2C Relay: bid your suit [alert] 2D Six or more diamonds: to play shows D>=6 2H Six or more hearts: to play shows H>=6 2S Six or more spades: to play shows S>=6 after (any auction) when asked dont_relay, rho.last=P | rho.last=X P My suit is clubs shows C>=6 2D My suit is diamonds shows D>=6 2H My suit is hearts shows H>=6 == fit-showing-jumps: Fit-showing jumps file: conventions/competitive/fit-showing-jumps.bid card: competitive.fit_showing_jumps.play needs: base, overcalls skills: competitive_bidding/fit_showing_jumps after 1x (P) | 1x (X) | 1x (1N) when passed_hand jump(S) Fit-showing jump: 4+ {x}, 5+ ♠ with an honour, 10-12 [alert] shows x>=4, S>=5, quality(S)>=fair, hcp+length_points=10..12, hcp<=11 when x is not S jump(H) Fit-showing jump: 4+ {x}, 5+ ♥ with an honour, 10-12 [alert] shows x>=4, H>=5, quality(H)>=fair, hcp+length_points=10..12, hcp<=11 when x is not H jump(D) Fit-showing jump: 4+ {x}, 5+ ♦ with an honour, 10-12 [alert] shows x>=4, D>=5, quality(D)>=fair, hcp+length_points=10..12, hcp<=11 when x is not D jump(C) Fit-showing jump: 4+ {x}, 5+ ♣ with an honour, 10-12 [alert] shows x>=4, C>=5, quality(C)>=fair, hcp+length_points=10..12, hcp<=11 when x is not C after 1x (1y) | 1x (2y) when passed_hand, y is not x jump(S) Fit-showing jump: 4+ {x}, 5+ ♠ with an honour, 10-12 [alert] shows x>=4, S>=5, quality(S)>=fair, hcp+length_points=10..12, hcp<=11 when x is not S, y is not S jump(H) Fit-showing jump: 4+ {x}, 5+ ♥ with an honour, 10-12 [alert] shows x>=4, H>=5, quality(H)>=fair, hcp+length_points=10..12, hcp<=11 when x is not H, y is not H jump(D) Fit-showing jump: 4+ {x}, 5+ ♦ with an honour, 10-12 [alert] shows x>=4, D>=5, quality(D)>=fair, hcp+length_points=10..12, hcp<=11 when x is not D, y is not D jump(C) Fit-showing jump: 4+ {x}, 5+ ♣ with an honour, 10-12 [alert] shows x>=4, C>=5, quality(C)>=fair, hcp+length_points=10..12, hcp<=11 when x is not C, y is not C after 1x (X) when !passed_hand jump(S) Fit-showing jump: 4+ {x}, 5+ ♠ with an honour, 10+ [alert] shows x>=4, S>=5, quality(S)>=fair, hcp+length_points>=10 when x is not S jump(H) Fit-showing jump: 4+ {x}, 5+ ♥ with an honour, 10+ [alert] shows x>=4, H>=5, quality(H)>=fair, hcp+length_points>=10 when x is not H jump(D) Fit-showing jump: 4+ {x}, 5+ ♦ with an honour, 10+ [alert] shows x>=4, D>=5, quality(D)>=fair, hcp+length_points>=10 when x is not D jump(C) Fit-showing jump: 4+ {x}, 5+ ♣ with an honour, 10+ [alert] shows x>=4, C>=5, quality(C)>=fair, hcp+length_points>=10 when x is not C after (1x) 1y (P) | (1x) 1y (X) | (1x) P (P) 1y (P) jump(S) Fit-showing jump: 4+ {y}, 5+ ♠ with an honour, 10+ [alert] shows y>=4, S>=5, quality(S)>=fair, hcp+length_points>=10 when x is not S, y is not S, !passed_hand | hcp<=11 jump(H) Fit-showing jump: 4+ {y}, 5+ ♥ with an honour, 10+ [alert] shows y>=4, H>=5, quality(H)>=fair, hcp+length_points>=10 when x is not H, y is not H, !passed_hand | hcp<=11 jump(D) Fit-showing jump: 4+ {y}, 5+ ♦ with an honour, 10+ [alert] shows y>=4, D>=5, quality(D)>=fair, hcp+length_points>=10 when x is not D, y is not D, !passed_hand | hcp<=11 jump(C) Fit-showing jump: 4+ {y}, 5+ ♣ with an honour, 10+ [alert] shows y>=4, C>=5, quality(C)>=fair, hcp+length_points>=10 when x is not C, y is not C, !passed_hand | hcp<=11 after 1x (P) 2z (P) | 1x (P) 3z (P) | 1x (X) 2z (P) | 1x (X) 3z (P) | 1x (1y) 2z (P) | 1x (1y) 3z (P) | 1x (2y) 2z (P) | 1x (2y) 3z (P) | (1y) 1x (P) 2z (P) | (1y) 1x (P) 3z (P) | (1y) 1x (X) 2z (P) | (1y) 1x (X) 3z (P) | (1y) P (P) 1x (P) 2z (P) | (1y) P (P) 1x (P) 3z (P) when asked fit_jump(t), z is not t 4{t} Game: 14+ total points, or 12+ with a fit in {z} shows tp(t)>=14 | (hcp>=12, z>=3 | quality(z)>=fair, z>=2) when t is H | t is S 4{z} Game in {z}: three or more, 14+ total points shows z>=3, tp(z)>=14 when t is C | t is D, z is H | z is S 3N Game in notrump: 16+ with {z} covered, or 18+ shows (hcp>=16, z>=2, balanced) | hcp>=18 when t is C | t is D 5{t} Game in {t}: 16+, a fit in {z} shows hcp>=16, z>=3 | quality(z)>=fair, !balanced when t is C | t is D cheapest(t) No game: sign off in {t} after 1x (P) 2z (P) 3x (P) | 1x (P) 3z (P) 3x (P) | 1x (P) 3z (P) 4x (P) | 1x (X) 2z (P) 3x (P) | 1x (X) 3z (P) 3x (P) | 1x (X) 3z (P) 4x (P) | 1x (1y) 2z (P) 3x (P) | 1x (1y) 3z (P) 3x (P) | 1x (1y) 3z (P) 4x (P) | 1x (2y) 3z (P) 3x (P) | 1x (2y) 3z (P) 4x (P) | (1y) 1x (P) 2z (P) 3x (P) | (1y) 1x (P) 3z (P) 3x (P) | (1y) 1x (P) 3z (P) 4x (P) when answered fit_jump(x), z is not x 4{x} Game: 13+ shows hcp+length_points>=13 when x is H | x is S, !passed_hand P No further bid == ghestem: Ghestem two-suited overcalls file: conventions/competitive/ghestem.bid card: competitive.ghestem.play needs: base, two-suited-overcalls skills: competitive_bidding/ghestem after (1C) 2C Ghestem: five or more diamonds and spades [alert] shows D>=5, S>=5, hcp+length_points>=9, hcp<=17 when !vul 2C Ghestem: five or more diamonds and spades [alert] shows D>=5, S>=5, hcp+length_points>=11, hcp<=17 when vul 3C Ghestem: five or more hearts and spades [alert] shows H>=5, S>=5, hcp+length_points>=9, hcp<=17 when !vul 3C Ghestem: five or more hearts and spades [alert] shows H>=5, S>=5, hcp+length_points>=11, hcp<=17 when vul after (1D) 2D Ghestem: five or more clubs and spades [alert] shows C>=5, S>=5, hcp+length_points>=9, hcp<=17 when !vul 2D Ghestem: five or more clubs and spades [alert] shows C>=5, S>=5, hcp+length_points>=11, hcp<=17 when vul 3C Ghestem: five or more hearts and spades [alert] shows H>=5, S>=5, hcp+length_points>=9, hcp<=17 when !vul 3C Ghestem: five or more hearts and spades [alert] shows H>=5, S>=5, hcp+length_points>=11, hcp<=17 when vul after (1H) 2H Ghestem: five or more clubs and spades [alert] shows C>=5, S>=5, hcp+length_points>=9, hcp<=17 when !vul 2H Ghestem: five or more clubs and spades [alert] shows C>=5, S>=5, hcp+length_points>=11, hcp<=17 when vul 3C Ghestem: five or more diamonds and spades [alert] shows D>=5, S>=5, hcp+length_points>=9, hcp<=17 when !vul 3C Ghestem: five or more diamonds and spades [alert] shows D>=5, S>=5, hcp+length_points>=11, hcp<=17 when vul after (1S) 2S Ghestem: five or more clubs and hearts [alert] shows C>=5, H>=5, hcp+length_points>=9, hcp<=17 when !vul 2S Ghestem: five or more clubs and hearts [alert] shows C>=5, H>=5, hcp+length_points>=11, hcp<=17 when vul 3C Ghestem: five or more diamonds and hearts [alert] shows D>=5, H>=5, hcp+length_points>=9, hcp<=17 when !vul 3C Ghestem: five or more diamonds and hearts [alert] shows D>=5, H>=5, hcp+length_points>=11, hcp<=17 when vul after (1m) 2m (P) | (1m) 2m (X) | (1x) 3C (P) | (1x) 3C (X) 4S Game: three or more spades, 12+ shows S>=3, S>=H, hcp+length_points>=12 when partner.S>=5 4H Game: three or more hearts, 12+ shows H>=3, hcp+length_points>=12 when partner.H>=5 jump(S) Invitational: four or more spades, 10-11 shows S>=4, hcp+length_points>=10, hcp+length_points<=11 when partner.S>=5, cheapest_rank(S)<=13 jump(H) Invitational: four or more hearts, 10-11 shows H>=4, hcp+length_points>=10, hcp+length_points<=11 when partner.H>=5, cheapest_rank(H)<=13 cheapest(S) Preference: spades when partner.S>=5 cheapest(H) Preference: hearts when partner.H>=5 cheapest(D) Preference: diamonds when partner.D>=5 cheapest(C) Preference: clubs when partner.C>=5 == lead-directing-doubles: Lead-directing doubles of artificial bids file: conventions/competitive/lead-directing-doubles.bid card: competitive.lead_directing_double.play needs: base skills: competitive_bidding/lead_directing_doubles define ldd_suit(x) = x>=5, top5(x)>=3 | (x>=6, quality(x)>=good) after (1N) P (2x) | (1N) P (3x) | (2N) P (3x) | (4N) P (5x) when !rho.named(x) X Lead-directing: a good {x} suit, lead it [alert] shows ldd_suit(x) after (2C) P (2D) when !rho.named(D) X Lead-directing: a good diamond suit, lead it [alert] shows ldd_suit(D) == maximal-doubles: Maximal doubles file: conventions/competitive/maximal-doubles.bid card: doubles.maximal needs: base, overcalls skills: competitive_bidding/maximal_doubles after 1M (*) 2M (3x) | (1y) 1M (*) 2M (3x) when (M is H, x is D) | (M is S, x is H) X Maximal double: a game try in {M} [alert] [artificial] shows tp(M)=17..18 3{M} Competitive: no game interest shows M>=6 | (M>=5, !balanced), tp(M)<=16 4{M} Game: 19+ shows tp(M)>=19 P No further bid after (any auction) when asked maximal(t) 4{t} Accepts the game try: a maximum raise shows tp(t)>=9 3{t} Declines: a minimum raise after 1M (*) 2M (3x) 3M (P) | (1y) 1M (*) 2M (3x) 3M (P) when (M is H, x is D) | (M is S, x is H) P No further bid == meckwell: Meckwell over their 1NT file: conventions/competitive/meckwell.bid needs: vs-1nt skills: competitive_bidding/meckwell, competitive_bidding/defense_vs_1nt after (1N) | (1N) P (P) when def is meckwell X Meckwell: a long minor, or both majors [alert] shows (C>=6 | D>=6, second_longest<=3, hcp+length_points>=12) | (H>=4, S>=4, H+S>=9, hcp+length_points>=10), hcp<=17 2C Meckwell: clubs and a major [alert] shows (C>=5, H>=4 | S>=4) | (C>=4, H>=5 | S>=5), hcp+length_points>=10, hcp<=17 2D Meckwell: diamonds and a major [alert] shows (D>=5, H>=4 | S>=4) | (D>=4, H>=5 | S>=5), hcp+length_points>=10, hcp<=17 2H Natural: six or more hearts, or a good five shows H>=6 | (H>=5, quality(H)>=good, C<=3, D<=3), S<=3, hcp+length_points>=11, hcp<=17 2S Natural: six or more spades, or a good five shows S>=6 | (S>=5, quality(S)>=good, C<=3, D<=3), H<=3, hcp+length_points>=11, hcp<=17 2N Meckwell: both minors, 5-5 or longer [alert] shows C>=5, D>=5, hcp+length_points>=8, hcp<=17 after (any auction) when asked meck_one, rho.last=P | rho.last=X | rho.last=XX 2C Relay: bid your suit [alert] after (any auction) when asked meck_relay, rho.last=P | rho.last=X P My suit is clubs shows C>=6 2D My suit is diamonds shows D>=6 2H Both majors [alert] shows H>=4, S>=4 == multi-landy: Landy and Multi-Landy over their 1NT file: conventions/competitive/multi-landy.bid needs: vs-1nt skills: competitive_bidding/multi_landy, competitive_bidding/landy, competitive_bidding/defense_vs_1nt after (1N) | (1N) P (P) when def is multi_landy | def is landy 2C Landy: both majors, 5-4 or longer [alert] shows H>=4, S>=4, H+S>=9, hcp+length_points>=10, hcp<=17 after (1N) | (1N) P (P) when def is multi_landy X Multi-Landy: a four-card major and a longer minor [alert] shows H=4 | S=4, C>=5 | D>=5, hcp+length_points>=12, hcp<=17 2D Multi-Landy: six or more in one major [alert] shows H>=6 | S>=6, second_longest<=4, hcp+length_points>=11, hcp<=17 2H Multi-Landy: five hearts and a four-card minor [alert] shows H>=5, S<=3, (C>=4, quality(C)>=fair) | (D>=4, quality(D)>=fair), hcp+length_points>=10, hcp<=17 2S Multi-Landy: five spades and a four-card minor [alert] shows S>=5, H<=3, (C>=4, quality(C)>=fair) | (D>=4, quality(D)>=fair), hcp+length_points>=10, hcp<=17 2N Multi-Landy: both minors, 5-5 or longer [alert] shows C>=5, D>=5, hcp+length_points>=8, hcp<=17 after (any auction) when asked ml_x, rho.last=P | rho.last=X | rho.last=XX 2C Pass or correct: bid your minor [alert] after (any auction) when asked ml_minor, rho.last=P | rho.last=X P My minor is clubs shows C>=5 2D My minor is diamonds shows D>=5 after (any auction) when asked ml_multi, rho.last=P | rho.last=X 2H Pass or correct: bid your major [alert] after (any auction) when asked ml_major, rho.last=P | rho.last=X P My major is hearts shows H>=6 2S My major is spades shows S>=6 == overcalls: Suit and notrump overcalls file: conventions/competitive/overcalls.bid needs: base skills: competitive_bidding/overcalls, partnership_bidding/overcalls after (1x) 1S Overcall: five spades, {one_min}-{one_max} total points shows S>=5, S>=H, S>=D, S>=C, hcp+length_points>=one_min, hcp<=one_max when x is not S, quality(S)>=good | top5(S)>=3 | hcp+length_points>=12 1H Overcall: five hearts, {one_min}-{one_max} total points shows H>=5, H>S, H>=D, H>=C, hcp+length_points>=one_min, hcp<=one_max when x is not H, quality(H)>=good | top5(H)>=3 | hcp+length_points>=12 1D Overcall: five diamonds, {one_min}-{one_max} total points shows D>=5, D>S, D>H, D>=C, hcp+length_points>=one_min, hcp<=one_max when x is not D, quality(D)>=good | top5(D)>=3 | hcp+length_points>=12 2C Overcall: five clubs, {two_min}-{two_max} total points shows C>=5, C>S, C>H, C>D, hcp>=two_min | (C>=6, hcp>=two_min-1), hcp+length_points<=two_max | hcp<=one_max when x is not C, C>=6 | quality(C)>=good | top5(C)>=4 2D Overcall: five diamonds, {two_min}-{two_max} total points shows D>=5, D>S, D>H, D>=C, hcp>=two_min | (D>=6, hcp>=two_min-1), hcp+length_points<=two_max | hcp<=one_max when x is not D, x is not C, D>=6 | quality(D)>=good | top5(D)>=4 2H Overcall: five hearts, {two_min}-{two_max} total points shows H>=5, H>S, H>=D, H>=C, hcp>=two_min | (H>=6, hcp>=two_min-1), hcp+length_points<=two_max | hcp<=one_max when x is not H, x is not D, x is not C, H>=6 | quality(H)>=good | top5(H)>=4 1N {nt_min}-{nt_max} balanced with a stopper in {x} shows balanced, hcp>=nt_min, hcp<=nt_max, S<=4, H<=4 when stop(x), !raptor, system is not brill after (1x) when system is brill 1N {nt_min}-{nt_max} balanced or semi-balanced with a stopper in {x} shows balanced | semibalanced, C=2..5, D=2..5, H=2..5, S=2..5, hcp>=nt_min, hcp<=nt_max when stop(x), !raptor after (1x) 1N (2x) 2S To play: five or more spades shows S>=5, hcp<=8 when x is H 3C To play: six or more clubs shows C>=6, hcp<=8, H<=3 | x is H, S<=3 | x is S 3D To play: six or more diamonds shows D>=6, D>C, hcp<=8, H<=3 | x is H, S<=3 | x is S 3N Game: 9+, {x} held shows hcp>=9, stop(x) P Not enough to advance shows hcp>=0 after (1N) when (nt_def is other, !dont_play) | nt_def is landy 2S Natural: five spades, 12+ total points shows S>=5, S>=H, S>=D, S>=C, hcp+length_points>=12, hcp<=17 2H Natural: five hearts, 12+ total points shows H>=5, H>S, H>=D, H>=C, hcp+length_points>=12, hcp<=17 2D Natural: five diamonds, 12+ total points shows D>=5, D>S, D>H, D>=C, hcp+length_points>=12, hcp<=17 after (1N) when nt_def is other, !dont_play 2C Natural: five clubs, 12+ total points shows C>=5, C>S, C>H, C>D, hcp+length_points>=12, hcp<=17 3S Preemptive: seven spades, 4-10 shows S>=7, hcp=4..10 3H Preemptive: seven hearts, 4-10 shows H>=7, hcp=4..10 3D Preemptive: seven diamonds, 4-10 shows D>=7, hcp=4..10 3C Preemptive: seven clubs, 4-10 shows C>=7, hcp=4..10 after (1x) when jump is weak 2D Weak jump overcall: six diamonds, 4-10 shows D=6, hcp=4..10, H<=3, S<=3 when x is not D, x is not H, x is not S, !vul | quality(D)>=good | top5(D)>=3 2H Weak jump overcall: six hearts, 4-10 shows H=6, hcp=4..10, S<=3 when x is not H, x is not S, !vul | quality(H)>=good | top5(H)>=3 2S Weak jump overcall: six spades, 4-10 shows S=6, hcp=4..10 when x is not S, !vul | quality(S)>=good | top5(S)>=3 3C Jump overcall: seven clubs, 4-10 shows C=7, hcp=4..10, H<=3, S<=3 when x is not C, !vul | quality(C)>=good | top5(C)>=3 3D Jump overcall: seven diamonds, 4-10 shows D=7, hcp=4..10, H<=3, S<=3 when x is not D, !vul | quality(D)>=good | top5(D)>=3 3H Jump overcall: seven hearts, 4-10 shows H=7, hcp=4..10, S<=3 when x is not H, !vul | quality(H)>=good | top5(H)>=3 3S Jump overcall: seven spades, 4-10 shows S=7, hcp=4..10 when x is not S, !vul | quality(S)>=good | top5(S)>=3 after (1x) P (1y) when y is not x 1S Overcall: five spades, {one_min}-18 total points shows S>=5, S>=H | x is H | y is H, S>=D | x is D | y is D, S>=C | x is C | y is C, hcp+length_points>=one_min, hcp<=18 when x is not S, y is not S, quality(S)>=good | top5(S)>=3 | hcp+length_points>=12 1H Overcall: five hearts, {one_min}-18 total points shows H>=5, H>S | x is S | y is S, H>=D | x is D | y is D, H>=C | x is C | y is C, hcp+length_points>=one_min, hcp<=18 when x is not H, y is not H, y is not S, quality(H)>=good | top5(H)>=3 | hcp+length_points>=12 2C Overcall: five clubs, {two_min}-18 total points shows C>=5, C>S | x is S | y is S, C>H | x is H | y is H, C>D | x is D | y is D, hcp>=two_min | (C>=6, hcp>=two_min-1), hcp<=18 when x is not C, y is not C, C>=6 | quality(C)>=good | top5(C)>=4 2D Overcall: five diamonds, {two_min}-18 total points shows D>=5, D>S | x is S | y is S, D>H | x is H | y is H, D>=C | x is C | y is C, hcp>=two_min | (D>=6, hcp>=two_min-1), hcp<=18 when x is not D, y is not D, D>=6 | quality(D)>=good | top5(D)>=4 2H Overcall: five hearts, {two_min}-18 total points shows H>=5, H>S | x is S | y is S, H>=D | x is D | y is D, H>=C | x is C | y is C, hcp>=two_min | (H>=6, hcp>=two_min-1), hcp<=18 when x is not H, y is S, H>=6 | quality(H)>=good | top5(H)>=4 1N {nt_min}-{nt_max} balanced, both their suits stopped shows balanced, hcp>=nt_min, hcp<=nt_max, S<=4, H<=4 when stop(x), stop(y), !passed_hand, !sandwich X Takeout: hearts and spades, 12+ shows H>=3, S>=3, H+S>=8 | hcp>=15, hcp>=12 when x is C, y is D X Takeout: diamonds and spades, 12+ shows D>=3, S>=3, D+S>=8 | hcp>=15, hcp>=12 when x is C, y is H X Takeout: diamonds and hearts, 12+ shows D>=3, H>=3, D+H>=8 | hcp>=15, hcp>=12 when x is C, y is S X Takeout: clubs and spades, 12+ shows C>=3, S>=3, C+S>=8 | hcp>=15, hcp>=12 when x is D, y is H X Takeout: clubs and hearts, 12+ shows C>=3, H>=3, C+H>=8 | hcp>=15, hcp>=12 when x is D, y is S X Takeout: both minors, 12+ shows C>=3, D>=3, C+D>=8 | hcp>=15, hcp>=12 when x is H, y is S X Takeout: hearts and spades, 15+ shows H>=4, S>=4, hcp>=15, !balanced when x is C, y is D X Takeout: diamonds and spades, 15+ shows D>=4, S>=4, hcp>=15, !balanced when x is C, y is H X Takeout: diamonds and hearts, 15+ shows D>=4, H>=4, hcp>=15, !balanced when x is C, y is S X Takeout: clubs and spades, 15+ shows C>=4, S>=4, hcp>=15, !balanced when x is D, y is H X Takeout: clubs and hearts, 15+ shows C>=4, H>=4, hcp>=15, !balanced when x is D, y is S X Takeout: both minors, 15+ shows C>=4, D>=4, hcp>=15, !balanced when x is H, y is S P No overcall after (1x) P (1y) when y is not x, jump is weak 2S Weak jump overcall: six spades, 4-10 shows S=6, hcp=4..10 when x is not S, y is not S, !vul | quality(S)>=good | top5(S)>=3 2H Weak jump overcall: six hearts, 4-10 shows H=6, hcp=4..10, S<=3 when x is not H, y is not H, y is not S, !vul | quality(H)>=good | top5(H)>=3 3C Jump overcall: seven clubs, 4-10 shows C=7, hcp=4..10, H<=3, S<=3 when x is not C, y is not C, !vul | quality(C)>=good | top5(C)>=3 3D Jump overcall: seven diamonds, 4-10 shows D=7, hcp=4..10, H<=3, S<=3 when x is not D, y is not D, !vul | quality(D)>=good | top5(D)>=3 3H Jump overcall: seven hearts, 4-10 shows H=7, hcp=4..10, S<=3 when x is not H, y is not H, !vul | quality(H)>=good | top5(H)>=3 3S Jump overcall: seven spades, 4-10 shows S=7, hcp=4..10 when x is not S, y is not S, !vul | quality(S)>=good | top5(S)>=3 after (1x) P (2x) 2S Overcall over their raise: five or more spades shows S>=5, S>=H | x is H, S>=D | x is D, S>=C | x is C, hcp+length_points>=10, hcp<=one_max when x is not S, S>=6 | quality(S)>=good | top5(S)>=3 2H Overcall over their raise: five or more hearts shows H>=5, H>S, H>=D | x is D, H>=C | x is C, hcp+length_points>=10, hcp<=one_max when x is C | x is D, H>=6 | quality(H)>=good | top5(H)>=3 2D Overcall over their raise: five or more diamonds shows D>=5, D>S, D>H, D>=C | x is C, hcp+length_points>=10, hcp<=one_max when x is C, D>=6 | quality(D)>=good | top5(D)>=3 3H Overcall over their raise: five or more hearts shows H>=5, H>=D, H>=C, (H>=6, hcp>=two_min-2) | (hcp>=14, !balanced), hcp<=one_max when x is S, H>=6 | quality(H)>=good | top5(H)>=4 3D Overcall over their raise: five or more diamonds shows D>=5, D>S | x is S, D>H | x is H, D>=C, (D>=6, hcp>=two_min-2) | (hcp>=14, !balanced), hcp<=one_max when x is H | x is S, D>=6 | quality(D)>=good | top5(D)>=4 3C Overcall over their raise: five or more clubs shows C>=5, C>S | x is S, C>H | x is H, C>D | x is D, (C>=6, hcp>=two_min-2) | (hcp>=14, !balanced), hcp<=one_max when x is not C, C>=6 | quality(C)>=good | top5(C)>=4 P No overcall over their raise after (1x) P (2x) when jump is weak 3S Weak jump over their raise: six spades, 4-10 shows S=6, hcp=4..10 when x is not S, !vul | quality(S)>=good | top5(S)>=3 3H Weak jump over their raise: six hearts, 4-10 shows H=6, hcp=4..10, S<=3 when x is C | x is D, !vul | quality(H)>=good | top5(H)>=3 3D Weak jump over their raise: six diamonds, 4-10 shows D=6, hcp=4..10, H<=3, S<=3 when x is C, !vul | quality(D)>=good | top5(D)>=3 after (1x) P (3x) 3S Overcall over their jump raise: five or more spades shows S>=5, S>=H | x is H, S>=D | x is D, S>=C | x is C, (S>=6, hcp>=two_min-2) | (hcp>=14, !balanced), hcp<=one_max when x is not S, S>=6 | quality(S)>=good | top5(S)>=4 3H Overcall over their jump raise: five or more hearts shows H>=5, H>S, H>=D | x is D, H>=C | x is C, (H>=6, hcp>=two_min-2) | (hcp>=14, !balanced), hcp<=one_max when x is C | x is D, H>=6 | quality(H)>=good | top5(H)>=4 3D Overcall over their jump raise: five or more diamonds shows D>=5, D>S, D>H, D>=C | x is C, (D>=6, hcp>=two_min-2) | (hcp>=14, !balanced), hcp<=one_max when x is C, D>=6 | quality(D)>=good | top5(D)>=4 P No overcall over their jump raise after (1x) P No overcall shows hcp<=one_max == penalty-doubles: Penalty doubles: they are too high file: conventions/competitive/penalty-doubles.bid needs: base define direct = !rho.last=P, !rho.last=X, !rho.last=XX define passed_round = rho.last=P, partner.last=P, !lho.last=P, !lho.last=X, !lho.last=XX define natural_theirs(x) = they.strain is x, they.fit(x).min>=4, partner.x.min<=2, shown.x.min<=2 define settled(x) = passed_round | they.fit(x).min>=7 | they.game_reached define good_trumps(x) = x>=4, quality(x)>=good | top5(x)>=3 define big_hand_vs_game = they.game_reached, hcp>=17 define pen_suit(x) = (good_trumps(x), we.hcp.min>=17) | (x>=4, we.hcp.min>=20) | (x>=3, we.hcp.min>=21) | we.hcp.min>=22 | (big_hand_vs_game, x>=2 | longest<=5 | me.last=X) define responder_first = partner.opened, me.bids=0, !passed_hand, !me.last=X, !me.last=XX define partner_nt = partner.opened, partner.bids=1, partner.hcp.min>=12, partner.hcp.max-partner.hcp.min<=3 define pen_spot(x) = natural_theirs(x), settled(x), !partner_nt define our_game_bid = me.last=3N | me.last=4H | me.last=4S | me.last=5C | me.last=5D | me.last=5H | me.last=5S | partner.last=3N | partner.last=4H | partner.last=4S | partner.last=5C | partner.last=5D | partner.last=5H | partner.last=5S define over_our_game(x) = x>=2, hcp>=12 | we.hcp.min>=20 define we_redoubled = me.last=XX, partner.opened, me.bids=0, partner.hcp.min>=10, direct define they_ran = we_redoubled | asked nt_penalty | asked penalty define ran_to(x) = !asked penalty | (direct, !lho.named(x)) | (passed_round, !rho.named(x)) define ran_into(x) = x>=4 define partner_preempted = partner.opened, partner.bids=1, partner.hcp.max<=11 define vs_overcall_of_preempt(x) = (x>=2, hcp>=15) | (x>=4, hcp>=12) | (x>=3, hcp>=12, quality(x)>=good | top5(x)>=3) | (x>=5, hcp>=9) define one_level_pen(x) = (x>=3, we.hcp.min>=19) | (x>=2, we.hcp.min>=22) after (any auction) when they.bid, direct | passed_round, !asked, they.level>=2, !responder_first X Penalty double of their spades shows pen_suit(S) when pen_spot(S) X Penalty double of their hearts shows pen_suit(H) when pen_spot(H) X Penalty double of their diamonds shows pen_suit(D) when pen_spot(D) X Penalty double of their clubs shows pen_suit(C) when pen_spot(C) after (any auction) when they.bid, passed_round | (direct, they.game_reached), !asked, !responder_first, they.strain is N, lho.bids+rho.bids>=2 X Penalty double of their notrump shows we.hcp.min>=21 | big_hand_vs_game after (any auction) when they.bid, direct | passed_round, !asked | asked signoff, our_game_bid, they.level>=4, they.strain is not N X Penalty double of their spades shows over_our_game(S) when natural_theirs(S), !partner_nt X Penalty double of their hearts shows over_our_game(H) when natural_theirs(H), !partner_nt X Penalty double of their diamonds shows over_our_game(D) when natural_theirs(D), !partner_nt X Penalty double of their clubs shows over_our_game(C) when natural_theirs(C), !partner_nt after (any auction) when they.bid, direct | passed_round, they_ran X Penalty: four or more spades shows ran_into(S) when natural_theirs(S), ran_to(S) X Penalty: four or more hearts shows ran_into(H) when natural_theirs(H), ran_to(H) X Penalty: four or more diamonds shows ran_into(D) when natural_theirs(D), ran_to(D) X Penalty: four or more clubs shows ran_into(C) when natural_theirs(C), ran_to(C) after (any auction) when they.bid, direct | passed_round, !asked, partner_preempted, me.bids=0 X Penalty double of their spades shows vs_overcall_of_preempt(S) when natural_theirs(S) X Penalty double of their hearts shows vs_overcall_of_preempt(H) when natural_theirs(H) X Penalty double of their diamonds shows vs_overcall_of_preempt(D) when natural_theirs(D) X Penalty double of their clubs shows vs_overcall_of_preempt(C) when natural_theirs(C) after (any auction) when they.bid, passed_round, !asked, they.level=1, me.has_bid, partner.has_bid X Penalty double of their spades shows one_level_pen(S) when natural_theirs(S) X Penalty double of their hearts shows one_level_pen(H) when natural_theirs(H) X Penalty double of their diamonds shows one_level_pen(D) when natural_theirs(D) after (any auction) when asked penalty, rho.last=P P Leaves the double in == raptor: Raptor 1NT: a four-card major and a longer minor file: conventions/competitive/raptor.bid card: competitive.raptor_1nt.play needs: base, overcalls skills: competitive_bidding/raptor after (1x) 1N Raptor: five or more diamonds and four of a major [alert] shows D>=5, H=4 | S=4, hcp>=8, hcp<=15 when !vul | hcp>=10, x is C 1N Raptor: five or more clubs and four of a major [alert] shows C>=5, H=4 | S=4, hcp>=8, hcp<=15 when !vul | hcp>=10, x is D 1N Raptor: four spades and five or more of a minor [alert] shows S=4, C>=5 | D>=5, hcp>=8, hcp<=15 when !vul | hcp>=10, x is H 1N Raptor: four hearts and five or more of a minor [alert] shows H=4, C>=5 | D>=5, hcp>=8, hcp<=15 when !vul | hcp>=10, x is S after (1m) 1N (P) | (1m) 1N (X) cheapest(m) Cue bid: 11+, asks for partner's major [alert] [artificial] shows hcp+length_points>=11 2H To play: five or more hearts shows H>=5, H>=S, hcp+length_points<=10 2S To play: five or more spades shows S>=5, S>H, hcp+length_points<=10 2D To play: diamonds when partner.D>=5 2C To play: clubs when partner.C>=5 3D Invitational in diamonds: four or more, 9-10 shows D>=4, hcp+length_points>=9 when partner.D>=5 3C Invitational in clubs: four or more, 9-10 shows C>=4, hcp+length_points>=9 when partner.C>=5 after (1M) 1N (P) | (1M) 1N (X) cheapest(M) Cue bid: 11+, asks for partner's minor [alert] [artificial] shows hcp+length_points>=11 2S To play: three or more spades shows S>=3, hcp+length_points<=10 when partner.S>=4 2H To play: three or more hearts shows H>=3, hcp+length_points<=10 when partner.H>=4 3S Invitational: four or more spades, 9-10 shows S>=4, hcp+length_points>=9 when partner.S>=4 2C Pass or correct: to play in partner's minor [alert] shows C>=3, D>=3 2D To play: six or more diamonds shows D>=6 when partner.H>=4 after (any auction) when asked raptor_major cheapest(H) Four hearts shows H=4 cheapest(S) Four spades shows S=4 after (any auction) when asked raptor_minor 3C Clubs shows C>=5 3D Diamonds shows D>=5 after (1M) 1N (P) 2C (P) P Clubs: to play shows C>=5 2D Diamonds shows D>=5 == responsive-doubles: Responsive doubles file: conventions/competitive/responsive-doubles.bid card: doubles.responsive.play needs: base skills: competitive_bidding/responsive_doubles after (1x) X (2x) when x is C | x is D X Responsive: both majors, 6+ total points [alert] [artificial] shows S>=4, H>=4, hcp+length_points>=6 after (1x) X (3x) when x is C | x is D X Responsive: both majors, 8+ total points [alert] [artificial] shows S>=4, H>=4, hcp+length_points>=8 after (1x) X (4x) when x is C | x is D X Responsive: both majors, 10+ total points [alert] [artificial] shows S>=4, H>=4, hcp+length_points>=10 after (1x) X (2x) when x is H | x is S X Responsive: both minors, 6+ total points [alert] [artificial] shows D>=4, C>=4, hcp+length_points>=6 after (1x) X (3x) when x is H | x is S X Responsive: both minors, 8+ total points [alert] [artificial] shows D>=4, C>=4, hcp+length_points>=8 after (1x) X (4x) when x is H | x is S X Responsive: both minors, 10+ total points [alert] [artificial] shows D>=4, C>=4, hcp+length_points>=10 after (1x) 1y (2x) | (1x) 2y (3x) | (1x) P (P) 1y (2x) X Responsive: the two unbid suits, 6+ total points [alert] [artificial] shows S>=4 | x is S | y is S, H>=4 | x is H | y is H, D>=4 | x is D | y is D, C>=4 | x is C | y is C, y=2, x<=3, hcp+length_points>=10 after (1x) 1y (3x) | (1x) 2y (4x) X Responsive: the two unbid suits, 8+ total points [alert] [artificial] shows S>=4 | x is S | y is S, H>=4 | x is H | y is H, D>=4 | x is D | y is D, C>=4 | x is C | y is C, y=2, x<=3, hcp+length_points>=11 after (any auction) when asked responsive cheapest(S) Preference: spades shows S>=3, S>=H when partner.S>=4 cheapest(H) Preference: hearts shows H>=3, H>S when partner.H>=4 cheapest(D) Preference: diamonds shows D>=3, D>=C when partner.D>=4 cheapest(C) Preference: clubs shows C>=3, C>D when partner.C>=4 == rubensohl: Rubensohl: transfers after interference over 1NT and after doubling a weak two file: conventions/competitive/rubensohl.bid needs: nt-interference, vs-preempts skills: competitive_bidding/rubensohl define rub_nt(y) = over_nt, rho.y>=4, maybe rho.H<=3 | maybe rho.S<=3 define rub_nt_opener(y) = over_nt, lho.y>=4, maybe lho.H<=3 | maybe lho.S<=3 after 1N (2D) when rub_nt(D) 2N Rubensohl: transfer to clubs, weak or game values [alert] [artificial] shows C>=6, C>D, H<=3, S<=3 3C Rubensohl: Stayman, game values, a four-card major [alert] [artificial] shows hcp>=10, H=4 | S=4, H<=4, S<=4 3D Rubensohl: transfer to hearts, invitational or better [alert] [artificial] shows H>=5, H>=S, hcp>=8 3H Rubensohl: transfer to spades, invitational or better [alert] [artificial] shows S>=5, S>H, hcp>=8 3S Rubensohl: game values, no stopper in {y} [alert] [artificial] shows hcp>=10, !stop(D), H<=3, S<=3 3N Game with a stopper in diamonds shows hcp>=10, stop(D), H<=3, S<=3 after 1N (2H) when rub_nt(H) 2N Rubensohl: transfer to clubs, weak or game values [alert] [artificial] shows C>=6, C>=D, S<=3 3C Rubensohl: transfer to diamonds, weak or game values [alert] [artificial] shows D>=6, D>C, S<=3 3D Rubensohl: Stayman, game values, four spades [alert] [artificial] shows hcp>=10, S=4 3H Rubensohl: transfer to spades, invitational or better [alert] [artificial] shows S>=5, hcp>=8 3S Rubensohl: game values, no stopper in hearts [alert] [artificial] shows hcp>=10, !stop(H), S<=3 3N Game with a stopper in hearts shows hcp>=10, stop(H), S<=3 after 1N (2S) when rub_nt(S) 2N Rubensohl: transfer to clubs, weak or game values [alert] [artificial] shows C>=6, C>=D, H<=3 3C Rubensohl: transfer to diamonds, weak or game values [alert] [artificial] shows D>=6, D>C, H<=3 3D Rubensohl: transfer to hearts, invitational or better [alert] [artificial] shows H>=5, hcp>=8 3H Rubensohl: Stayman, game values, four hearts [alert] [artificial] shows hcp>=10, H=4 3S Rubensohl: game values, no stopper in spades [alert] [artificial] shows hcp>=10, !stop(S), H<=3 3N Game with a stopper in spades shows hcp>=10, stop(S), H<=3 after 1N (2y) 2N (P) when rub_nt_opener(y) 3C Completes the transfer to clubs [artificial] after 1N (2y) 3C (P) when rub_nt_opener(y), y is not D 3D Completes the transfer to diamonds [artificial] after 1N (2y) 3D (P) when rub_nt_opener(y), y is not H 4H A maximum and three or more hearts: game shows H>=3, hcp>=17 3N A maximum, two hearts shows H<=2, hcp>=17 3H Completes the transfer: a minimum [artificial] after 1N (2y) 3H (P) when rub_nt_opener(y), y is not S 4S A maximum and three or more spades: game shows S>=3, hcp>=17 3N A maximum, two spades shows S<=2, hcp>=17 3S Completes the transfer: a minimum [artificial] after 1N (2D) 3C (P) when rub_nt_opener(D) 3H Four hearts shows H>=4 3S Four spades shows S>=4, H<=3 3N No four-card major, diamonds stopped shows stop(D) 3D No four-card major, no stopper [artificial] after 1N (2H) 3D (P) when rub_nt_opener(H) 3S Four spades shows S>=4 3N No four spades, hearts stopped shows stop(H) 3H No four spades, no stopper [artificial] after 1N (2S) 3H (P) when rub_nt_opener(S) 4H Four hearts shows H>=4 3N No four hearts, spades stopped shows stop(S) 3S No four hearts, no stopper [artificial] after 1N (2y) 3S (P) when rub_nt_opener(y) 3N A stopper in {y} shows stop(y) 4C No stopper: clubs shows C>=D 4D No stopper: diamonds shows D>C after 1N (2y) 2N (P) 3C (P) when rub_nt(y) P Weak: to play in clubs shows hcp<=9 3N Game values with clubs shows hcp>=10 after 1N (2y) 3C (P) 3D (P) when rub_nt(y), y is not D P Weak: to play in diamonds shows hcp<=9 3N Game values with diamonds shows hcp>=10 after 1N (2y) 3D (P) 3H (P) when rub_nt(y), y is not H P Invitational: no more shows hcp<=9 4H Game: six or more hearts shows H>=6, hcp>=10 3N Game: five hearts, choice of games shows H=5, hcp>=10 after 1N (2y) 3H (P) 3S (P) when rub_nt(y), y is not S P Invitational: no more shows hcp<=9 4S Game: six or more spades shows S>=6, hcp>=10 3N Game: five spades, choice of games shows S=5, hcp>=10 after 1N (2y) 3D (P) 3H (P) 3N (P) when rub_nt_opener(y), y is not H 4H Three hearts: the major shows H>=3 P Two hearts: notrump after 1N (2y) 3H (P) 3S (P) 3N (P) when rub_nt_opener(y), y is not S 4S Three spades: the major shows S>=3 P Two spades: notrump after 1N (2D) 3C (P) 3H (P) | 1N (2D) 3C (P) 3S (P) | 1N (2H) 3D (P) 3S (P) | 1N (2S) 3H (P) 4H (P) when over_nt 4H The heart fit: game shows H>=4 when partner.H>=4 4S The spade fit: game shows S>=4 when partner.S>=4 3N No fit: notrump P Game reached after 1N (2D) 3C (P) 3D (P) | 1N (2H) 3D (P) 3H (P) | 1N (2S) 3H (P) 3S (P) when over_nt 4C No stopper: clubs shows C>=4, C>=D 4D No stopper: diamonds shows D>=4, D>C 3N To play in 3NT after (2x) X (P) | (2x) P (P) X (P) when after_x, x is not C 2N Rubensohl: transfer to clubs, to play or invite [alert] [artificial] shows C>=4, C>=D, hcp<=12 | C>=5, S<=3 | x is S, H<=3 | x is H 3C Rubensohl: transfer to diamonds, to play or invite [alert] [artificial] shows D>=4, D>C, hcp<=12 | D>=5, S<=3 | x is S, H<=3 | x is H when x is not D 3C Rubensohl: Stayman, game values, a four-card major [alert] [artificial] shows hcp>=13, H=4 | S=4, H<=4, S<=4 when x is D 3D Rubensohl: transfer to hearts, four or more [alert] [artificial] shows H>=4, H>=S | x is S, hcp<=12 when x is S 3D Rubensohl: transfer to hearts, five or more, 9-12 [alert] [artificial] shows H>=5, H>=S, hcp>=9, hcp<=12 when x is D 3D Rubensohl: Stayman, game values, four spades [alert] [artificial] shows hcp>=13, S=4 when x is H 3H Rubensohl: transfer to spades, five or more, 9-12 [alert] [artificial] shows S>=5, hcp>=9, hcp<=12 when x is D | x is H 3H Rubensohl: Stayman, game values, four hearts [alert] [artificial] shows hcp>=13, H=4 when x is S 3S Rubensohl: game values, no stopper in {x}, no four-card major [alert] [artificial] shows hcp>=13, !stop(x), H<=3 | x is H, S<=3 | x is S 3N Game with {x} stopped shows hcp>=13, stop(x), H<=3 | x is H, S<=3 | x is S after (2x) X (P) 2N (P) | (2x) P (P) X (P) 2N (P) when after_x, x is not C 3N 19+ with {x} stopped: game shows hcp>=19, stop(x) 3C Completes the transfer [artificial] after (2x) X (P) 3C (P) | (2x) P (P) X (P) 3C (P) when after_x, x is not C, x is not D 3N 19+ with {x} stopped: game shows hcp>=19, stop(x) 3D Completes the transfer [artificial] after (2x) X (P) 3D (P) | (2x) P (P) X (P) 3D (P) when after_x, x is not C, x is not H 4H 17+ and four hearts: game shows H>=4, hcp>=17 3N 19+ with {x} stopped, two hearts or fewer: game shows hcp>=19, stop(x), H<=2 3H Completes the transfer [artificial] after (2x) X (P) 3H (P) | (2x) P (P) X (P) 3H (P) when after_x, x is not C, x is not S 4S 17+ and four spades: game shows S>=4, hcp>=17 3N 19+ with {x} stopped, two spades or fewer: game shows hcp>=19, stop(x), S<=2 3S Completes the transfer [artificial] after (2x) X (P) 3C (P) | (2x) P (P) X (P) 3C (P) when after_x, x is D 3H Four hearts shows H>=4 3S Four spades shows S>=4, H<=3 3N No four-card major, diamonds stopped shows stop(D) 3D No four-card major, no stopper [artificial] after (2x) X (P) 3D (P) | (2x) P (P) X (P) 3D (P) when after_x, x is H 3S Four spades shows S>=4 3N No four spades, hearts stopped shows stop(H) 3H No four spades, no stopper [artificial] after (2x) X (P) 3H (P) | (2x) P (P) X (P) 3H (P) when after_x, x is S 4H Four hearts shows H>=4 3N No four hearts, spades stopped shows stop(S) 3S No four hearts, no stopper [artificial] after (2x) X (P) 3S (P) | (2x) P (P) X (P) 3S (P) when after_x, x is not C 3N A stopper in {x} shows stop(x) 4C No stopper: clubs shows C>=D 4D No stopper: diamonds shows D>C after (2x) X (P) 2N (P) 3C (P) | (2x) P (P) X (P) 2N (P) 3C (P) | (2x) X (P) 3C (P) 3D (P) | (2x) P (P) X (P) 3C (P) 3D (P) when after_x, x is not C P Weak: to play shows hcp<=8 3N 9+ with {x} stopped shows hcp>=9, stop(x) P To play after (2x) X (P) 3D (P) 3H (P) | (2x) P (P) X (P) 3D (P) 3H (P) when after_x, x is not C, x is not H 4H Game: 11+ with five, or 12+ shows hcp>=11, H>=5 | hcp>=12 P Weak or invitational: no more after (2x) X (P) 3H (P) 3S (P) | (2x) P (P) X (P) 3H (P) 3S (P) when after_x, x is not C, x is not S 4S Game: 11+ with five, or 12+ shows hcp>=11, S>=5 | hcp>=12 P Invitational: no more == sandwich-nt: Sandwich 1NT: the two unbid suits file: conventions/competitive/sandwich-nt.bid card: competitive.sandwich_nt.play needs: base, two-suited-overcalls skills: competitive_bidding/sandwich_nt after (1x) P (1y) when y is not x, !passed_hand | !u1n 1N Sandwich 1NT: the two unbid suits, hearts and spades [alert] shows H>=4, S>=4, H>=5 | S>=5, hcp>=8, hcp<=15 when x is C, y is D 1N Sandwich 1NT: the two unbid suits, diamonds and spades [alert] shows D>=4, S>=4, D>=5 | S>=5, hcp>=8, hcp<=15 when x is C, y is H 1N Sandwich 1NT: the two unbid suits, diamonds and hearts [alert] shows D>=4, H>=4, D>=5 | H>=5, hcp>=8, hcp<=15 when x is C, y is S 1N Sandwich 1NT: the two unbid suits, clubs and spades [alert] shows C>=4, S>=4, C>=5 | S>=5, hcp>=8, hcp<=15 when x is D, y is H 1N Sandwich 1NT: the two unbid suits, clubs and hearts [alert] shows C>=4, H>=4, C>=5 | H>=5, hcp>=8, hcp<=15 when x is D, y is S 1N Sandwich 1NT: the two unbid suits, both minors [alert] shows C>=4, D>=4, C>=5 | D>=5, hcp>=8, hcp<=15 when x is H, y is S == scrambling-2nt: Scrambling 2NT file: conventions/competitive/scrambling-2nt.bid card: competitive.scrambling_2nt.play needs: base, takeout-double skills: competitive_bidding/scrambling_2nt after (1M) P (2M) X (P) | (1M) P (2M) P (P) X (P) 2N Scrambling: both minors, pick one [alert] [artificial] shows C>=4, D>=4, C<=5, D<=5, C+D>=8, hcp<=10, S<=3 | M is S, H<=3 | M is H after (any auction) when asked scramble 3C Four or more clubs shows C>=4 3D Diamonds: fewer than four clubs shows D>=4 after (1M) P (2M) X (P) 2N (P) 3C (P) | (1M) P (2M) P (P) X (P) 2N (P) 3C (P) P Clubs will do shows C>=D 3D Diamonds: longer shows D>C == snapdragon: Snapdragon doubles file: conventions/competitive/snapdragon.bid card: competitive.snapdragon.play needs: base, advances skills: competitive_bidding/snapdragon after (1x) 1y (1z) | (1x) 1y (2z) | (1x) 2y (2z) | (1x) 2y (3z) when y is not x, z is not x, z is not y X Snapdragon: five or more clubs, tolerance for {y}, 8+ [alert] shows C>=5, y>=2, hcp>=8 when x is not C, y is not C, z is not C X Snapdragon: five or more diamonds, tolerance for {y}, 8+ [alert] shows D>=5, y>=2, hcp>=8 when x is not D, y is not D, z is not D X Snapdragon: five or more hearts, tolerance for {y}, 8+ [alert] shows H>=5, y>=2, hcp>=8 when x is not H, y is not H, z is not H X Snapdragon: five or more spades, tolerance for {y}, 8+ [alert] shows S>=5, y>=2, hcp>=8 when x is not S, y is not S, z is not S after (1x) 1y (1z) X (P) | (1x) 1y (2z) X (P) | (1x) 2y (2z) X (P) | (1x) 2y (3z) X (P) | (1x) 1y (1z) X (XX) | (1x) 1y (2z) X (XX) | (1x) 2y (2z) X (XX) | (1x) 2y (3z) X (XX) when y is not x, z is not x, z is not y jump(C) Fit for clubs and 15+ shows C>=3, hcp+length_points>=15 when partner.C>=5 jump(D) Fit for diamonds and 15+ shows D>=3, hcp+length_points>=15 when partner.D>=5 jump(H) Fit for hearts and 15+ shows H>=3, hcp+length_points>=15 when partner.H>=5 jump(S) Fit for spades and 15+ shows S>=3, hcp+length_points>=15 when partner.S>=5 cheapest(C) Three or more clubs shows C>=3 when partner.C>=5 cheapest(D) Three or more diamonds shows D>=3 when partner.D>=5 cheapest(H) Three or more hearts shows H>=3 when partner.H>=5 cheapest(S) Three or more spades shows S>=3 when partner.S>=5 cheapest(y) Six or more {y} shows y>=6 cheapest(N) {z} stopped, no fit shows stop(z), hcp+length_points<=14 cheapest(y) Back to {y}: no fit == sos-redouble: SOS redouble file: conventions/competitive/sos-redouble.bid card: other_conventions.sos_redouble.play needs: base skills: competitive_bidding/sos_redouble after 1x (X) P (P) XX SOS: {x} is short, pick another suit [alert] [artificial] shows x<=3 P To play: four or more {x} shows x>=4 after 1x (X) P (P) XX (P) cheapest(C) Rescue: clubs shows C>=D | x is D, C>=H | x is H, C>=S | x is S when x is not C cheapest(D) Rescue: diamonds shows D>C | x is C, D>=H | x is H, D>=S | x is S when x is not D cheapest(H) Rescue: hearts shows H>C | x is C, H>D | x is D, H>=S | x is S when x is not H cheapest(S) Rescue: spades shows S>C | x is C, S>D | x is D, S>H | x is H when x is not S == suction: Suction over their 1NT file: conventions/competitive/suction.bid needs: vs-1nt skills: competitive_bidding/suction, competitive_bidding/defense_vs_1nt define suction_one(x) = x>=6, second_longest<=4 | (x=5, quality(x)>=good, second_longest<=3) after (1N) | (1N) P (P) when def is suction X Suction: clubs and hearts [alert] shows C>=4, H>=4, C+H>=9, hcp+length_points>=10, hcp<=17 2C Suction: diamonds, or hearts and spades [alert] [artificial] shows suction_one(D) | (H>=4, S>=4, H+S>=9), hcp+length_points>=10, hcp<=17 2D Suction: hearts, or spades and clubs [alert] [artificial] shows suction_one(H) | (S>=4, C>=4, S+C>=9), hcp+length_points>=10, hcp<=17 2H Suction: spades, or clubs and diamonds [alert] [artificial] shows suction_one(S) | (C>=5, D>=5), hcp+length_points>=10, hcp<=17 2S Suction: clubs, or diamonds and hearts [alert] [artificial] shows suction_one(C) | (D>=5, H>=5), hcp+length_points>=10, hcp<=17 2N Suction: diamonds and spades [alert] shows D>=5, S>=5, hcp+length_points>=10, hcp<=17 after (any auction) when asked suc_relay(x), rho.last=P | rho.last=X | rho.last=XX cheapest(x) Suction relay: pass or correct [alert] after (any auction) when asked suc_pick(a,b), rho.last=P | rho.last=X | rho.last=XX cheapest(a) Preference: {a} shows a>b cheapest(b) Preference: {b} shows b>=a after (any auction) when asked suc_correct(x), rho.last=P | rho.last=X P My suit is {x} shows x>=5 after (any auction) when asked suc_correct(D), rho.last=P | rho.last=X 2H Hearts and spades shows H>=4, S>=4 after (any auction) when asked suc_correct(H), rho.last=P | rho.last=X 2S Spades and clubs shows S>=4, C>=4 after (any auction) when asked suc_correct(S), rho.last=P | rho.last=X 2N Clubs and diamonds shows C>=5, D>=5 after (any auction) when asked suc_correct(C), rho.last=P | rho.last=X 3D Diamonds and hearts shows D>=5, H>=5 after (any auction) when asked suc_keep(a,b), rho.last=P | rho.last=X P Keeps {a} shows a>=b cheapest(b) Prefers {b} shows b>a == support-doubles: Support doubles and redoubles file: conventions/competitive/support-doubles.bid card: doubles.support.play needs: rebids skills: competitive_bidding/support_doubles after 1x (*) 1M (1z) | 1x (*) 1M (2z) | 1x (*) 1M (3z) when M is not x, z is not M when (through is none, rho.last<=2{M}) | rho.last<=through X Support double: exactly three {M} [alert] [artificial] shows M=3 jump(N) 18-19 balanced with a stopper in {z} shows balanced, hcp=18..19, M<=2, stop(z) when nt_jump_to_game, lho.last=X 3N 20+ with a stopper in {z} shows hcp>=20, M<=2, stop(z) when lho.last=X cheapest(z) Cue bid: 18+, forcing to game [alert] [artificial] shows hcp>=18, M<=2 when lho.last=X after 1x (*) 1M (X) when M is not x, rdbl XX Support redouble: exactly three {M} [alert] [artificial] shows M=3 after (any auction) when asked support(M,x,z), rho.last=P, partner.last=X cheapest(M) Five or more {M}, minimum shows M>=5, points<=9 jump(M) Five or more {M}, 10-11, invitational shows M>=5, points=10..11 4M Five or more {M}, 12+: game shows M>=5, points>=12 1N Four {M}, 6-10 balanced with a stopper in {z} shows M=4, balanced, points=6..10, stop(z) 2N Four {M}, 11-12, a stopper in {z}, invitational shows M=4, semibalanced, points=11..12, stop(z) 3N Four {M}, 13+ with a stopper in {z} shows M=4, semibalanced, points>=13, stop(z) cheapest(x) Raise: four or more {x}, minimum shows x>=4, M=4, points<=10 when x is C | x is D, z is not x, cheapest_rank(x)<=14 cheapest(D) Four or more diamonds, minimum shows D>=4, M=4, points<=10 when x is C, z is not D, cheapest_rank(D)<=14, maybe lho.D<=4 cheapest(C) Four or more clubs, minimum shows C>=4, M=4, points<=10 when x is not C, z is not C, cheapest_rank(C)<=14, maybe lho.C<=4 cheapest(z) Cue bid: four {M}, 13+, no stopper in {z} [alert] [artificial] shows M=4, points>=13 jump(M) Four {M}, 11-12, invitational shows M=4, points=11..12 P Penalty: four or more {z} with two of the top five shows z>=4, top5(z)>=2, M<=4, hcp>=7 cheapest(M) Four {M}, no better bid shows M>=4 after (any auction) when asked support(M), rho.last=P, partner.last=XX P Plays one {M} redoubled 4M Five or more {M}, 13+: game shows M>=5, points>=13 after (any auction) when asked support(M), rho.last!=P cheapest(M) Competes: five or more {M} shows M>=5, points<=11 4M Five or more {M}, 12+: game shows M>=5, points>=12 P No further bid after (any auction) when asked support_cue(M,z) 3N A stopper in {z} shows stop(z) 4M Game: no stopper in {z} == takeout-double: Takeout doubles file: conventions/competitive/takeout-double.bid needs: base, overcalls skills: competitive_bidding/takeout_doubles after (1x) X Takeout: the unbid suits and 12+, or any 18+ shows hcp+length_points>=12, (S>=3 | x is S, H>=3 | x is H, D>=3 | x is D, C>=3 | x is C) | hcp>=oc_max+1, hcp+length_points>=13 | x>=3 | has(A,x) | has(K,x) | (!has(Q,x), !has(J,x)) | !vul | they.vul after (1x) X (P) | (1x) P (P) X (P) 1H 0-8 total points, four or more hearts shows H>=4, H>=S | x is S, hcp+length_points<=8 | (H=4, hcp<=9) when x is not H, x is not S 1S 0-8 total points, four or more spades shows S>=4, S>H | x is H, hcp+length_points<=8 | (S=4, hcp<=9) when x is not S 1D 0-8 total points, four or more diamonds shows D>=4, D>C, S<=3 | x is S, H<=3 | x is H, hcp+length_points<=8 | (D=4, hcp<=9) when x is not D, x is not H, x is not S 2C 0-8 total points, four or more clubs shows C>=4, C>=D, S<=3 | x is S, H<=3 | x is H, hcp+length_points<=8 | (C=4, hcp<=9) when x is not C 2D 0-8 total points, four or more diamonds shows D>=4, D>C, S<=3 | x is S, H<=3 | x is H, hcp+length_points<=8 | (D=4, hcp<=9) when x is not D, x is not C 2H 0-8 total points, four or more hearts shows H>=4, H>=S | x is S, hcp+length_points<=8 | (H=4, hcp<=9) when x is not H, x is not D, x is not C 1N 7-10 HCP, balanced, a stopper in {x} shows balanced, hcp>=7, hcp<=10 when stop(x) 2H 9-11 total points, four or more hearts shows H>=4, H>=S | x is S, hcp+length_points=9..11, H>=5 | hcp>=10 when x is not H, x is not S 2S 9-11 total points, four or more spades shows S>=4, S>H | x is H, hcp+length_points=9..11, S>=5 | hcp>=10 when x is not S 3C 9-11 total points, four or more clubs shows C>=4, C>=D, S<=3 | x is S, H<=3 | x is H, hcp+length_points=9..11, C>=5 | hcp>=10 when x is not C 3D 9-11 total points, four or more diamonds shows D>=4, D>C, S<=3 | x is S, H<=3 | x is H, hcp+length_points=9..11, D>=5 | hcp>=10 when x is not D, x is not C 3H 9-11 total points, four or more hearts shows H>=4, H>=S | x is S, hcp+length_points=9..11, H>=5 | hcp>=10 when x is not H, x is not D, x is not C 2N 11-12 total points, balanced, a stopper in {x} shows balanced, hcp+length_points=11..12 when stop(x) 3N Game: 12+, a stopper in {x} shows hcp>=12, stop(x), H<=3 | x is H, S<=3 | x is S 1D 0-8, no four-card suit to show: three diamonds shows D>=3, H<=3, S<=3, hcp<=8 when x is C 1H 0-8, no four-card suit to show: three hearts shows H>=3, S<=3, hcp<=8 when x is not H, x is not S 2C 0-8, no four-card suit to show: three clubs shows C>=3, H<=3, S<=3, hcp<=8 when x is not C 2D 0-8, no four-card suit to show: three diamonds shows D>=3, H<=3, S<=3, hcp<=8 when x is not D, x is not C 2{x} Cue bid: 12+ total points, asks for a description [alert] [artificial] shows hcp+length_points>=12 after (1x) X (P) 1y (P) | (1x) P (P) X (P) 1y (P) P Minimum takeout double shows hcp<=16 2{y} 18-19 total points, four-card support shows y>=4, hcp+length_points=17..19 3{y} 20-21 total points, four-card support shows y>=4, hcp+length_points=20..21 4{y} 22+ total points, four-card support for partner's major shows y>=4, hcp+length_points>=22 when y is H | y is S 1N 18-19 balanced with a stopper in {x} shows balanced, hcp=17..19 when stop(x) cheapest(S) 18+ total points and a five-card spade suit shows S>=5, hcp+length_points>=18 | hcp>=17 when x is not S, y is not S cheapest(H) 18+ total points and a five-card heart suit shows H>=5, hcp+length_points>=18 | hcp>=17 when x is not H, y is not H cheapest(D) 18+ total points and a five-card diamond suit shows D>=5, hcp+length_points>=18 | hcp>=17 when x is not D, y is not D cheapest(C) 18+ total points and a five-card club suit shows C>=5, hcp+length_points>=18 | hcp>=17 when x is not C, y is not C after (1x) X (P) 2y (P) | (1x) P (P) X (P) 2y (P) P Minimum takeout double shows hcp<=16 3{y} Strong raise: four-card support, 18+ shows y>=4, hcp+length_points>=18 | hcp>=17 3{y} Strong raise: three-card support, 20+ shows y=3, hcp>=20 cheapest(S) 18+ total points and a five-card spade suit shows S>=5, hcp+length_points>=18 | hcp>=17 when x is not S, y is not S cheapest(H) 18+ total points and a five-card heart suit shows H>=5, hcp+length_points>=18 | hcp>=17 when x is not H, y is not H cheapest(D) 18+ total points and a five-card diamond suit shows D>=5, hcp+length_points>=18 | hcp>=17 when x is not D, y is not D cheapest(C) 18+ total points and a five-card club suit shows C>=5, hcp+length_points>=18 | hcp>=17 when x is not C, y is not C 2N 18-19 balanced with a stopper in {x} shows balanced, hcp=17..19 when stop(x) after (1x) X (2x) P (P) cheapest(S) 16+ and five spades shows S>=5, hcp>=16 when x is not S cheapest(H) 16+ and five hearts shows H>=5, S<=4, hcp>=16 when x is not H X Takeout again: short in {x} shows x<=1, hcp>=12 P No further bid after (1x) X (2x) P (P) X (P) cheapest(S) Takeout: four or more spades shows S>=4, S>=H, S>=D, S>=C when x is not S cheapest(H) Takeout: four or more hearts shows H>=4, H>=D, H>=C when x is not H cheapest(D) Takeout: my longest, diamonds shows D>=C when x is not D cheapest(C) Takeout: my longest, clubs shows C>=3 when x is not C P Penalty: five of their suit shows x>=5, hcp>=5 after (1x) X (P) 1y (2x) | (1x) X (P) 2y (2x) 3{y} 16+, four-card support shows y>=4, hcp+length_points>=16 cheapest(C) 16+ and five clubs shows C>=5, hcp>=16, y<=3 when x is not C, y is not C cheapest(D) 16+ and five diamonds shows D>=5, D>C, hcp>=16, y<=3 when x is not D, y is not D 2N 18-19 balanced with a stopper in {x} shows balanced, hcp=17..19 when stop(x) P No further bid after (1x) X (1y) P (*) | (1x) X (2y) P (*) when y is not x, !rho.last=P cheapest(S) 18+ total points and five spades shows S>=5, hcp+length_points>=18 | hcp>=17 when x is not S, y is not S cheapest(H) 18+ total points and five hearts shows H>=5, S<=4, hcp+length_points>=18 | hcp>=17 when x is not H, y is not H cheapest(D) 18+ total points and five diamonds shows D>=5, S<=4, H<=4, hcp+length_points>=18 | hcp>=17 when x is not D, y is not D cheapest(C) 18+ total points and five clubs shows C>=5, D<=4, S<=4, H<=4, hcp+length_points>=18 | hcp>=17 when x is not C, y is not C after (1x) X (P) 2x (*) when !rho.last=P X Power double: 17+ HCP shows hcp>=17 P No extras: 16 or less shows hcp<=16 cheapest(S) Four or more spades, no extras shows S>=4, hcp<=16 when x is not S cheapest(H) Four or more hearts, no extras shows H>=4, S<=3, hcp<=16 when x is not H cheapest(N) A stopper in {x}, no extras shows stop(x), hcp<=16 cheapest(D) Four or more diamonds, no extras shows D>=4, D>C | x is C, hcp<=16 when x is not D cheapest(C) Four or more clubs, no extras shows C>=4, C>=D | x is D, hcp<=16 when x is not C after (1x) X (1y) | (1x) P (P) X (1y) 1S Free bid: 6+ total points, four or more spades shows S>=4, hcp+length_points>=6 when x is not S, y is not S cheapest(H) Free bid: 6+ total points, five or more hearts shows H>=5, hcp+length_points>=6 when x is not H, y is not H cheapest(D) Free bid: 6+ total points, five or more diamonds shows D>=5, S<=3, H<=4, hcp+length_points>=6 when x is not D, y is not D cheapest(C) Free bid: 6+ total points, five or more clubs shows C>=5, S<=3, H<=4, hcp+length_points>=6 when x is not C, y is not C 1N 8-11 total points, balanced, a stopper in both their suits shows balanced, hcp+length_points>=8, hcp+length_points<=11 when stop(x), stop(y) 2{x} Cue bid: 12+ total points [alert] [artificial] shows hcp+length_points>=12 P No free bid after (1x) X (2y) | (1x) P (P) X (2y) cheapest(S) Free bid: 8+ total points, five or more spades shows S>=5, hcp+length_points>=8 when x is not S, y is not S cheapest(H) Free bid: 8+ total points, five or more hearts shows H>=5, S<=4, hcp+length_points>=8 when x is not H, y is not H cheapest(D) Free bid: 8+ total points, five or more diamonds shows D>=5, S<=4, H<=4, hcp+length_points>=8 when x is not D, y is not D cheapest(C) Free bid: 8+ total points, five or more clubs shows C>=5, S<=4, H<=4, hcp+length_points>=8 when x is not C, y is not C 2N 11-12 total points, balanced, a stopper in {x} shows balanced, hcp+length_points>=11, hcp+length_points<=12 when stop(x) P No free bid after (1x) X (XX) | (1x) P (P) X (XX) cheapest(S) Four or more spades shows S>=4, S>H when x is not S cheapest(H) Four or more hearts shows H>=4, H>=S when x is not H cheapest(D) Four or more diamonds shows D>=4, D>C, S<=3 | x is S, H<=3 | x is H when x is not D cheapest(C) Four or more clubs shows C>=4, C>=D, S<=3 | x is S, H<=3 | x is H when x is not C P No four-card suit to name after (1x) X (XX) P (P) cheapest(C) Rescue: four or more clubs, the cheapest shows C>=4 when x is not C cheapest(D) Rescue: four or more diamonds, the cheapest shows D>=4, C<=3 | x is C when x is not D cheapest(H) Rescue: four or more hearts, the cheapest shows H>=4, C<=3 | x is C, D<=3 | x is D when x is not H cheapest(S) Rescue: four or more spades shows S>=4, C<=3 | x is C, D<=3 | x is D, H<=3 | x is H when x is not S P Leaves it in: four or more of their suit shows x>=4 after (1x) P (2x) X Takeout of their raise: short in {x}, the unbid suits, 13+ HCP shows hcp>=13, x<=1, S>=3 | x is S, H>=3 | x is H, D>=3 | x is D, C>=3 | x is C after (1x) P (2x) X (P) 4S Game: four or more spades, 11+ shows S>=4, S>=H | x is H, hcp+length_points>=11 when x is not S 4H Game: four or more hearts, 11+ shows H>=4, H>S | x is S, hcp+length_points>=11 when x is not H 3N Game: 11+ with {x} stopped shows hcp>=11, stop(x), S<=3 | x is S, H<=3 | x is H P Penalty: five or more {x} with two top honours shows x>=5, quality(x)>=good cheapest(S) Four or more spades shows S>=4, S>=H | x is H when x is not S cheapest(H) Four or more hearts shows H>=4, H>S | x is S when x is not H cheapest(D) Four or more diamonds shows D>=4, D>C, S<=3 | x is S, H<=3 | x is H when x is not D cheapest(C) Four or more clubs shows C>=4, C>=D, S<=3 | x is S, H<=3 | x is H when x is not C cheapest(C) No four-card suit: clubs when x is not C, C>=D | x is D cheapest(D) No four-card suit: diamonds when x is not D, D>C | x is C cheapest(H) No four-card suit: hearts when x is not H cheapest(S) No four-card suit: spades when x is not S == their-1nt-overcall: Responder over their 1NT overcall file: conventions/competitive/their-1nt-overcall.bid needs: base after 1x (1N) X Penalty: 10+ total points, no long suit of our own shows hcp+length_points>=10 when S<=4 | x is S, H<=4 | x is H, C<=5, D<=5 2{x} Raise: 6-9 total points, support for partner's suit shows x>=3, tp(x)>=6, tp(x)<=9 when x is H | x is S | x>=5 2H 9+ total points, five or more hearts shows H>=5, hcp+length_points>=9 when x is not H 2S 9+ total points, five or more spades shows S>=5, hcp+length_points>=9 when x is not S 2C 9+ total points, six or more clubs shows C>=6, hcp+length_points>=9 when x is not C 2D 9+ total points, six or more diamonds shows D>=6, hcp+length_points>=9 when x is not D 3C Preemptive: seven or more clubs, 5-9 total points shows C>=7, hcp+length_points>=5, hcp+length_points<=9 when x is not C 3D Preemptive: seven or more diamonds, 5-9 total points shows D>=7, hcp+length_points>=5, hcp+length_points<=9 when x is not D P No suitable bid after 1x (1N) X (P) 2{x} Pulls: six or more {x}, a minimum with a singleton or void shows x>=6, hcp<=13, shortest<=1 P Leaves the double in after 1x (1N) X (*) when !rho.last=P P No further bid after 1x (1N) 3z (P) when z is C | z is D, z is not x 5{z} Game in partner's suit: 19+ and support shows z>=2, hcp>=19 P No game == total-tricks: The Law of Total Tricks file: conventions/competitive/total-tricks.bid needs: base skills: competitive_bidding/law_of_total_tricks define doubler_four(x) = (lho.H>=5 | rho.H>=5, partner.S>=3, partner.D>=3, partner.C>=3) | (lho.S>=5 | rho.S>=5, partner.H>=3, partner.D>=3, partner.C>=3), partner.x.min=3 define opened_minor(x) = x is C | x is D, partner.opened, partner.x.min<=3 define minor_raise(x) = !opened_minor(x) | x>=5 define minor_preempt(x) = !opened_minor(x) | x>=6 define weak_jump_raise(y) = y>=5 | favourable define lott_trumps(x) = we.fit(x).min+doubler_four(x)-unfavourable define they_compete = !rho.last=P | (partner.last=P, !lho.last=P) after (any auction) when they.bid, they.still_bidding, !game_reached 2x Competes: to play shows lott_trumps(x)=8 when doubler_four(x) | !doubler_four(x), partner.x>=3, hcp>=5, we.hcp.min<=24, they_compete 3x Competes: to play shows lott_trumps(x)=9 when doubler_four(x) | !doubler_four(x), partner.x>=3, hcp>=5, we.hcp.min<=24 4x Competes: to play shows lott_trumps(x)>=10 when doubler_four(x) | !doubler_four(x), partner.x>=3, hcp>=5, we.hcp.min<=24 == transfers-after-double: Transfer responses after their takeout double file: conventions/competitive/transfers-after-double.bid card: vs_to_double.new_suit_forcing_tfr needs: base, after-interference, vs-takeout-double skills: bidding_conventions/transfers_after_double after 1M (X) XX Redouble: 10+, fewer than three {M} [alert] [artificial] shows hcp+length_points>=10, M<=2 2N A fit and 11+: three or more {M} [alert] [artificial] shows M>=3, tp(M)>=11 1N Transfer to clubs: five or more, a weak two or better [alert] [artificial] shows C>=5, C>=D, M<=2, hcp>=5, hcp>=8 | C>=6, S<=4 | M is S, H<=4 2C Transfer to diamonds: five or more, a weak two or better [alert] [artificial] shows D>=5, D>C, M<=2, hcp>=5, hcp>=8 | D>=6, S<=4 | M is S, H<=4 2D Transfer to hearts: a constructive raise, three hearts, 8-10 [alert] [artificial] shows H=3, tp(H)>=8, tp(H)<=10 when M is H 2D Transfer to hearts: five or more, a weak two or better [alert] [artificial] shows H>=5, S<=2, hcp>=5, hcp>=8 | H>=6 when M is S 2H Transfer to spades: a constructive raise, three spades, 8-10 [alert] [artificial] shows S=3, tp(S)>=8, tp(S)<=10 when M is S 2{M} Raise: three {M}, 4-7 shows M=3, tp(M)>=4, tp(M)<=7 3D Four hearts, 8-10 [alert] [artificial] shows H>=4, tp(H)>=8, tp(H)<=10 when M is H 3H Four spades, 8-10 [alert] [artificial] shows S>=4, tp(S)>=8, tp(S)<=10 when M is S after 1H (X) 2D (P) 4H Game: 17+ shows tp(H)>=17 3H Invites game: 15-16 shows tp(H)>=15, tp(H)<=16 2H Minimum: completes the transfer after 1S (X) 2H (P) 4S Game: 17+ shows tp(S)>=17 3S Invites game: 15-16 shows tp(S)>=15, tp(S)<=16 2S Minimum: completes the transfer after 1M (X) 1N (P) 2C Completes the transfer [artificial] after 1M (X) 2C (P) 2D Completes the transfer [artificial] after 1S (X) 2D (P) 2H Completes the transfer [artificial] after 1H (X) 3D (P) 4H Game: 15+ shows tp(H)>=15 3H Minimum after 1S (X) 3H (P) 4S Game: 15+ shows tp(S)>=15 3S Minimum after 1M (X) 1N (P) 2C (P) P Weak: to play shows hcp<=9 3C Invites: 10-12, six or more clubs shows C>=6, hcp>=10, hcp<=12 3N Game values: 13+ shows hcp>=13 P No further bid after 1M (X) 2C (P) 2D (P) P Weak: to play shows hcp<=9 3D Invites: 10-12, six or more diamonds shows D>=6, hcp>=10, hcp<=12 3N Game values: 13+ shows hcp>=13 P No further bid after 1S (X) 2D (P) 2H (P) P Weak: to play shows hcp<=9 3H Invites: 10-12, six or more hearts shows H>=6, hcp>=10, hcp<=12 4H Game: six or more hearts, 13+ shows H>=6, hcp>=13 3N Game values: 13+, five hearts shows hcp>=13 P No further bid == two-suited-overcalls: Michaels cue bids and the Unusual 2NT file: conventions/competitive/two-suited-overcalls.bid needs: base, overcalls skills: competitive_bidding/michaels_unusual, competitive_bidding/unusual_vs_unusual, competitive_bidding/leaping_michaels, competitive_bidding/non_leaping_michaels after (1m) when mich_minors | mich_quasi | mich_play, !ghestem 2{m} Michaels: five or more in each major [alert] [artificial] shows H>=5, S>=5, hcp+length_points>=9, hcp<=17 when strength is wide_range, !vul 2{m} Michaels: five or more in each major [alert] [artificial] shows H>=5, S>=5, hcp+length_points>=11, hcp<=17 when strength is wide_range, vul 2{m} Michaels: five or more in each major, weak or 16+ [alert] [artificial] shows H>=5, S>=5, hcp+length_points>=9, hcp<=11 when strength is weak_or_strong, !vul 2{m} Michaels: five or more in each major, weak or 16+ [alert] [artificial] shows H>=5, S>=5, hcp+length_points>=11, hcp<=11 when strength is weak_or_strong, vul 2{m} Michaels: five or more in each major, weak or 16+ [alert] [artificial] shows H>=5, S>=5, hcp>=16 when strength is weak_or_strong after (1H) when mich_majors | mich_play, !ghestem 2H Michaels: five or more spades and a five-card minor [alert] [artificial] shows S>=5, C>=5 | D>=5, hcp+length_points>=9, hcp<=17 when strength is wide_range, !vul 2H Michaels: five or more spades and a five-card minor [alert] [artificial] shows S>=5, C>=5 | D>=5, hcp+length_points>=11, hcp<=17 when strength is wide_range, vul 2H Michaels: spades and a minor, five-five, weak or 16+ [alert] [artificial] shows S>=5, C>=5 | D>=5, hcp+length_points>=9, hcp<=11 when strength is weak_or_strong, !vul 2H Michaels: spades and a minor, five-five, weak or 16+ [alert] [artificial] shows S>=5, C>=5 | D>=5, hcp+length_points>=11, hcp<=11 when strength is weak_or_strong, vul 2H Michaels: spades and a minor, five-five, weak or 16+ [alert] [artificial] shows S>=5, C>=5 | D>=5, hcp>=16 when strength is weak_or_strong after (1S) when mich_majors | mich_play, !ghestem 2S Michaels: five or more hearts and a five-card minor [alert] [artificial] shows H>=5, C>=5 | D>=5, hcp+length_points>=9, hcp<=17 when strength is wide_range, !vul 2S Michaels: five or more hearts and a five-card minor [alert] [artificial] shows H>=5, C>=5 | D>=5, hcp+length_points>=11, hcp<=17 when strength is wide_range, vul 2S Michaels: hearts and a minor, five-five, weak or 16+ [alert] [artificial] shows H>=5, C>=5 | D>=5, hcp+length_points>=9, hcp<=11 when strength is weak_or_strong, !vul 2S Michaels: hearts and a minor, five-five, weak or 16+ [alert] [artificial] shows H>=5, C>=5 | D>=5, hcp+length_points>=11, hcp<=11 when strength is weak_or_strong, vul 2S Michaels: hearts and a minor, five-five, weak or 16+ [alert] [artificial] shows H>=5, C>=5 | D>=5, hcp>=16 when strength is weak_or_strong after (1H) | (1S) when u2n_play | u2n_jump | ghestem 2N Unusual 2NT: five or more in each minor [alert] [artificial] shows C>=5, D>=5, hcp+length_points>=9 after (1C) when u2n_play | u2n_jump | ghestem 2N Unusual 2NT: five or more diamonds and hearts [alert] [artificial] shows D>=5, H>=5, hcp+length_points>=9 after (1D) when u2n_play | u2n_jump | ghestem 2N Unusual 2NT: five or more clubs and hearts [alert] [artificial] shows C>=5, H>=5, hcp+length_points>=9 after (1m) P (2m) when mich_minors | mich_quasi | mich_play, !ghestem 3{m} Michaels: five or more in each major [alert] [artificial] shows H>=5, S>=5, hcp+length_points>=9, hcp<=17 when !vul 3{m} Michaels: five or more in each major [alert] [artificial] shows H>=5, S>=5, hcp+length_points>=11, hcp<=17 when vul after (1M) P (2M) when u2n_play | u2n_jump | ghestem 2N Unusual 2NT: five or more in each minor [alert] [artificial] shows C>=5, D>=5, hcp+length_points>=9 after (1C) P (2C) when u2n_play | u2n_jump | ghestem 2N Unusual 2NT: five or more diamonds and hearts [alert] [artificial] shows D>=5, H>=5, hcp+length_points>=9 after (1D) P (2D) when u2n_play | u2n_jump | ghestem 2N Unusual 2NT: five or more clubs and hearts [alert] [artificial] shows C>=5, H>=5, hcp+length_points>=9 after (1m) P (2m) 3m (P) | (1m) P (2m) 3m (X) when partner.H>=5, partner.S>=5 3H Preference: more hearts than spades shows H>S 3S Preference: spades, at least as many as hearts shows S>=H 4H Game in hearts: four-card support, or three and 10+ shows H>S, H>=4 | (H>=3, hcp>=10) 4S Game in spades: four-card support, or three and 10+ shows S>=H, S>=4 | (S>=3, hcp>=10) 3N To play: 13+, {m} held, no major fit shows hcp>=13, H<=2, S<=2, stop(m) after (1m) P (2m) 3m (*) when partner.H>=5, partner.S>=5, !rho.last=P, !rho.last=X cheapest(H) Competes: three or more hearts, more than spades shows H>=3, H>S cheapest(S) Competes: three or more spades shows S>=3, S>=H P No fit worth competing with after (1m) P (2m) 3m (*) 3y (*) when y is H | y is S P Minimum: no further bid 4{y} Game: 16+ or four losers or fewer shows hcp>=16 | losers<=4 after (1M) P (2M) 2N (P) | (1M) P (2M) 2N (X) when partner.C>=5, partner.D>=5 3C Preference: more clubs than diamonds shows C>D 3D Preference: diamonds, at least as many as clubs shows D>=C 5C Game in clubs: 12+ with four-card support shows C>=4, C>D, hcp>=12 5D Game in diamonds: 12+ with four-card support shows D>=4, D>=C, hcp>=12 after (1C) P (2C) 2N (P) | (1C) P (2C) 2N (X) when partner.D>=5, partner.H>=5 3D Preference: more diamonds than hearts shows D>H 3H Preference: hearts, at least as many as diamonds shows H>=D 4H Game in hearts: four-card support, or three and 10+ shows H>=D, H>=4 | (H>=3, hcp>=10) after (1D) P (2D) 2N (P) | (1D) P (2D) 2N (X) when partner.C>=5, partner.H>=5 3C Preference: more clubs than hearts shows C>H 3H Preference: hearts, at least as many as clubs shows H>=C 4H Game in hearts: four-card support, or three and 10+ shows H>=C, H>=4 | (H>=3, hcp>=10) after (1x) P (2x) 2N (*) when partner.longest>=5, partner.second_longest>=5, !rho.last=P, !rho.last=X P No fit worth competing with after (1x) P (2x) 2N (*) 3y (*) when y is not x P Minimum: no further bid 4{y} Game in hearts: 16+ or four losers or fewer shows hcp>=16 | losers<=4 when y is H after (1m) 2m (P) | (1m) 2m (X) when partner.H>=5, partner.S>=5 2H Preference: more hearts than spades shows H>S 2S Preference: spades, at least as many as hearts shows S>=H 3H Jump preference: invitational, 10-12 with three hearts shows H>S, H>=3, hcp>=10, hcp<=12 3S Jump preference: invitational, 10-12 with three spades shows S>=H, S>=3, hcp>=10, hcp<=12 4H Game in hearts: weak with four, or 13-15 shows H>S, (H>=4, hcp<=9) | (H>=3, hcp>=13, hcp<=15) 4S Game in spades: weak with four, or 13-15 shows S>=H, (S>=4, hcp<=9) | (S>=3, hcp>=13, hcp<=15) 3{m} Cue bid: 16+, game or slam interest [alert] [artificial] shows hcp>=16 3N To play: 13+, their suit held, no major fit shows hcp>=13, H<=2, S<=2, stop(m) 2D Natural: six or more diamonds, no major fit shows D>=6, H<=2, S<=2, hcp<=12 when m is C after (1m) 2m (*) when partner.H>=5, partner.S>=5 cheapest(H) Competes: three or more hearts, more than spades shows H>=3, H>S, hcp<=12 cheapest(S) Competes: three or more spades shows S>=3, S>=H, hcp<=12 4H Game in hearts over their bid shows H>=4, H>S 4S Game in spades over their bid shows S>=4, S>=H P No fit worth competing with after (1H) 2H (P) | (1H) 2H (X) when partner.S>=5 2S Preference: three or more spades shows S>=3 2N Asks for your minor, to play: at most two spades [alert] [artificial] shows S<=2 when mich_adv is ask_2nt 3C Natural: six or more clubs, to play shows C>=6, S<=2, hcp<=12 when mich_adv is ask_2nt 2N Asks for your minor: 10+, at most two spades [alert] [artificial] shows S<=2, hcp>=10 when mich_adv is pass_or_correct 3C Pass or correct: your minor, up to 9 [alert] [artificial] shows S<=2, hcp<=9 when mich_adv is pass_or_correct 3D Natural: six or more diamonds, to play shows D>=6, S<=2, hcp<=12 3S Jump preference: invitational, 10-12 with three spades shows S>=3, hcp>=10, hcp<=12 4S Game in spades: weak with four, or 13-15 shows (S>=4, hcp<=9) | (S>=3, hcp>=13, hcp<=15) 3H Cue bid: a strong spade raise, 16+, game or slam interest [alert] [artificial] shows S>=3, hcp>=16 3N To play: 13+, hearts held, no spade fit shows hcp>=13, S<=2, stop(H) when C<=2 | D<=2 after (1S) 2S (P) | (1S) 2S (X) when partner.H>=5 3H Preference: three or more hearts shows H>=3 2N Asks for your minor, to play: at most two hearts [alert] [artificial] shows H<=2 when mich_adv is ask_2nt 3C Natural: six or more clubs, to play shows C>=6, H<=2, hcp<=12 when mich_adv is ask_2nt 2N Asks for your minor: 10+, at most two hearts [alert] [artificial] shows H<=2, hcp>=10 when mich_adv is pass_or_correct 3C Pass or correct: your minor, up to 9 [alert] [artificial] shows H<=2, hcp<=9 when mich_adv is pass_or_correct 3D Natural: six or more diamonds, to play shows D>=6, H<=2, hcp<=12 4H Game in hearts: weak with four, or 13-15 shows (H>=4, hcp<=9) | (H>=3, hcp>=13, hcp<=15) 3S Cue bid: a heart raise, 12+, game interest [alert] [artificial] shows H>=3, hcp>=12 3N To play: 13+, spades held, no heart fit shows hcp>=13, H<=2, stop(S) when C<=2 | D<=2 after (1M) 2M (*) when partner.S>=5 | partner.H>=5 cheapest(S) Competes: three or more spades shows S>=3, hcp<=12 when M is H cheapest(H) Competes: three or more hearts shows H>=3, hcp<=12 when M is S P No fit worth competing with after (1M) 2M (*) 3m (*) when mich_adv is ask_2nt | m is D P Partner's own suit: to play after (1M) 2M (*) 3C (P) | (1M) 2M (*) 3C (X) when mich_adv is pass_or_correct P My minor is clubs: to play shows C>=5, C>=D 3D My minor is diamonds shows D>=5, D>C after (1M) 2M (*) 3C (*) when mich_adv is pass_or_correct, they.bid cheapest(C) Competes: my minor is clubs, 13+ or six shows C>=5, C>=D, hcp>=13 | C>=6 cheapest(D) Competes: my minor is diamonds, 13+ or six shows D>=5, D>C, hcp>=13 | D>=6 P A minimum over their bid after (1M) 2M (*) 3C (*) 3D (*) when mich_adv is pass_or_correct P To play in partner's minor after (1M) 2M (*) 2N (P) | (1M) 2M (*) 2N (X) 3C My minor is clubs shows C>=5, C>=D 3D My minor is diamonds shows D>=5, D>C after (1M) 2M (*) 2N (*) when they.bid cheapest(C) Competes: my minor is clubs, 13+ or six shows C>=5, C>=D, hcp>=13 | C>=6 cheapest(D) Competes: my minor is diamonds, 13+ or six shows D>=5, D>C, hcp>=13 | D>=6 P A minimum over their bid after (1M) 2M (*) 2N (*) 3m (*) | (1M) 2M (*) 2N (*) 4m (*) P To play in partner's minor 4{m} Invites game in partner's minor: 10-12, three-card support shows hcp>=10, hcp<=12, m>=3 when m<=3 | hcp<=11 3N Game: 13+, {M} held shows hcp>=13, stop(M) 5{m} Game in partner's minor: 13+, or 12 with four shows (hcp>=13, m>=3) | (hcp>=12, m>=4) 4{M} Slam try in partner's minor: 17+, four-card support [alert] [artificial] shows hcp>=17, m>=4 after (1M) 2M (*) 2N (*) 3m (*) 4m (*) 5{m} Accepts: 14+, or 12+ with six of the minor shows hcp>=14 | (hcp>=12, m>=6) P Declines: a minimum after (1M) 2M (*) 2N (*) 3m (*) 4M (*) 6{m} Accepts the slam try: 13+ shows hcp>=13 5{m} Declines: a minimum after (1M) 2N (P) | (1M) 2N (X) when partner.C>=5, partner.D>=5 3C Preference: more clubs than diamonds shows C>D 3D Preference: diamonds, at least as many as clubs shows D>=C 4C Preemptive: four or more clubs, up to 8 shows C>=4, C>D, hcp<=8 4D Preemptive: four or more diamonds, up to 8 shows D>=4, D>=C, hcp<=8 5C Game in clubs: 12+ with four-card support shows C>=4, C>D, hcp>=12 5D Game in diamonds: 12+ with four-card support shows D>=4, D>=C, hcp>=12 3N To play: 13+, both majors held shows hcp>=13, stop(H), stop(S) 3{M} Cue bid: 16+, game or slam interest [alert] [artificial] shows hcp>=16 after (1C) 2N (P) | (1C) 2N (X) when partner.D>=5, partner.H>=5 3D Preference: more diamonds than hearts shows D>H 3H Preference: hearts, at least as many as diamonds shows H>=D 4D Preemptive: four or more diamonds, up to 8 shows D>=4, D>H, hcp<=8 4H Game in hearts: weak with four, or 12-15 shows H>=D, (H>=4, hcp<=8) | (H>=3, hcp>=12, hcp<=15) 3N To play: 13+, clubs and spades held shows hcp>=13, stop(C), stop(S) 3C Cue bid: 16+, game or slam interest [alert] [artificial] shows hcp>=16 after (1D) 2N (P) | (1D) 2N (X) when partner.C>=5, partner.H>=5 3C Preference: more clubs than hearts shows C>H 3H Preference: hearts, at least as many as clubs shows H>=C 4C Preemptive: four or more clubs, up to 8 shows C>=4, C>H, hcp<=8 4H Game in hearts: weak with four, or 12-15 shows H>=C, (H>=4, hcp<=8) | (H>=3, hcp>=12, hcp<=15) 3N To play: 13+, diamonds and spades held shows hcp>=13, stop(D), stop(S) 3D Cue bid: 16+, game or slam interest [alert] [artificial] shows hcp>=16 after (1x) 2N (*) when partner.longest>=5, partner.second_longest>=5 P No fit worth competing with after (1x) 2x (P) 2y (P) | (1x) 2x (P) 3y (P) when y is not x, y is H | y is S, !partner.jumped P Minimum: no further bid 3{y} Strong two-suiter: invites game shows hcp>=15, hcp<=16 4{y} Strong two-suiter: game shows hcp>=17 after (1x) 2x (P) 3y (P) when y is not x, y is H | y is S, partner.jumped 4{y} Accepts the invitation shows hcp>=11 P Declines: a minimum after (1m) 2m (*) 3m (P) | (1m) 2m (*) 3m (X) cheapest(S) Minimum: spades shows S>=H, hcp<=12 cheapest(H) Minimum: hearts shows H>S, hcp<=12 4S Maximum: game in spades shows S>=H, hcp>=13 4H Maximum: game in hearts shows H>S, hcp>=13 after (1H) 2H (*) 3H (P) | (1H) 2H (*) 3H (X) 3S Minimum: spades shows hcp<=12 4C Maximum: my minor is clubs shows C>=5, C>=D, hcp>=13 4D Maximum: my minor is diamonds shows D>=5, D>C, hcp>=13 4S Maximum: six or more spades shows S>=6, hcp>=13 after (1S) 2S (*) 3S (P) | (1S) 2S (*) 3S (X) 4H Minimum: game in hearts shows hcp<=12 4C Maximum: my minor is clubs shows C>=5, C>=D, hcp>=13 4D Maximum: my minor is diamonds shows D>=5, D>C, hcp>=13 after (1M) 2M (*) 3M (*) 4m (P) | (1M) 2M (*) 3M (*) 4m (X) 4H Game in hearts: the fit the cue bid showed when M is S 4S Game in spades: the fit the cue bid showed when M is H after (1x) 2x (*) 3x (*) 3y (*) when y is H | y is S, y is not x 4{y} Game: three or more {y} shows y>=3 3N Game: {x} held, no {y} fit shows stop(x) 4{y} Game in the best fit after (1x) 2N (P) 3y (P) when y is not x P Minimum: no further bid 4{y} Strong: game in hearts shows hcp>=17 when y is H 3N Strong: 17+, {x} held shows hcp>=17, stop(x) after (1x) 2N (P) 3x (P) cheapest(C) Minimum: clubs shows C>=5, C>=D, hcp<=12 when x is H | x is S cheapest(D) Minimum: diamonds shows D>=5, D>C, hcp<=12 when x is H | x is S 3N Maximum: 13+, {x} held shows hcp>=13, stop(x) cheapest(H) Hearts shows H>=5 when x is C | x is D after 1H (2H) when rho.S>=5 2S Cue bid: limit raise or better in hearts [alert] [artificial] shows H>=3, hcp+length_points>=10 3H Competitive raise: 6-9, three or more hearts shows H>=3, hcp+length_points>=6, hcp+length_points<=9 4H Preemptive raise: four or more hearts, under 10 shows H>=4, hcp+length_points<=9 2N 11-12, spades held, no fit shows hcp>=11, hcp<=12, stop(S), H<=2 3N 13+, spades held, no fit shows hcp>=13, stop(S), H<=2 3C Natural: five or more clubs, 12+, forcing shows C>=5, H<=2, hcp>=12 3D Natural: five or more diamonds, 12+, forcing shows D>=5, H<=2, hcp>=12 P Nothing to say over their Michaels after 1S (2S) when rho.H>=5 3H Cue bid: limit raise or better in spades [alert] [artificial] shows S>=3, hcp+length_points>=10 3S Competitive raise: 6-9, three or more spades shows S>=3, hcp+length_points>=6, hcp+length_points<=9 4S Preemptive raise: four or more spades, under 10 shows S>=4, hcp+length_points<=9 2N 11-12, hearts held, no fit shows hcp>=11, hcp<=12, stop(H), S<=2 3N 13+, hearts held, no fit shows hcp>=13, stop(H), S<=2 3C Natural: five or more clubs, 12+, forcing shows C>=5, S<=2, hcp>=12 3D Natural: five or more diamonds, 12+, forcing shows D>=5, S<=2, hcp>=12 P Nothing to say over their Michaels after 1m (2m) when rho.H>=5, rho.S>=5 2H Cue bid: limit raise or better in {m} [alert] [artificial] shows m>=4, hcp+length_points>=11 3{m} Competitive raise: 6-9, four or more {m} shows m>=4, hcp+length_points>=6, hcp+length_points<=9 2D Natural: five or more diamonds, 8+ shows D>=5, hcp+length_points>=8 when m is C 3C Natural: five or more clubs, 10+ shows C>=5, hcp+length_points>=10 when m is D 2N 11-12, both majors held shows hcp>=11, hcp<=12, stop(H), stop(S) 3N 13+, both majors held shows hcp>=13, stop(H), stop(S) P Nothing to say over their Michaels after 1M (2N) when rho.C>=5, rho.D>=5 3{M} Competitive raise: 7-10, three or more {M} shows M>=3, hcp+length_points>=7, hcp+length_points<=10 4{M} Preemptive raise: four or more {M}, under 10 shows M>=4, hcp+length_points<=9 3N 13+, both minors held, no fit shows hcp>=13, stop(C), stop(D), M<=2 P Nothing to say over their 2NT after 1M (2N) when rho.C>=5, rho.D>=5, !uvu 3C Cue bid: limit raise or better in {M} [alert] [artificial] shows M>=3, hcp+length_points>=10 3D Cue bid: game force without a fit [alert] [artificial] shows hcp>=13, M<=2 3S Natural: five or more spades, 12+, forcing shows S>=5, H<=2, hcp>=12 when M is H after 1M (2N) when rho.C>=5, rho.D>=5, uvu 3D Unusual vs Unusual: limit raise or better in {M} [alert] [artificial] shows M>=3, hcp+length_points>=10 3C Unusual vs Unusual: game force with five of the other major [alert] [artificial] shows hcp>=13, M<=2, S>=5 | M is S, H>=5 | M is H 3S Natural: five or more spades, 7-10 shows S>=5, H<=2, hcp+length_points>=7, hcp+length_points<=10 when M is H after 1C (2N) when rho.D>=5, rho.H>=5 3D Cue bid: limit raise or better in clubs [alert] [artificial] shows C>=5, hcp+length_points>=10 3C Competitive raise: 6-9, five or more clubs shows C>=5, hcp+length_points>=6, hcp+length_points<=9 3S Natural: five or more spades, 10+, forcing shows S>=5, hcp+length_points>=10 3N 13+, diamonds and hearts held shows hcp>=13, stop(D), stop(H) P Nothing to say over their 2NT after 1D (2N) when rho.C>=5, rho.H>=5 3C Cue bid: limit raise or better in diamonds [alert] [artificial] shows D>=4, hcp+length_points>=10 3D Competitive raise: 6-9, four or more diamonds shows D>=4, hcp+length_points>=6, hcp+length_points<=9 3S Natural: five or more spades, 10+, forcing shows S>=5, hcp+length_points>=10 3N 13+, clubs and hearts held shows hcp>=13, stop(C), stop(H) P Nothing to say over their 2NT after 1m (2m) 3m (P) | 1M (2M) 3M (P) | 1M (2N) 3M (P) when they.bid 4{M} Game: 17+ opposite the competitive raise shows tp(M)>=17 P No game after 1x (2x) 2N (P) when they.bid 3N Accepts: 14+ shows hcp>=14 P Minimum: no game after 1x (2x) 3x (*) | 1x (2x) 4x (*) | 1x (2N) 3x (*) | 1x (2N) 4x (*) | 1x (2x) 2N (*) | 1x (2x) 3N (*) | 1x (2N) 3N (*) when they.bid X Penalty: 15+ HCP shows hcp>=15 P No further bid after 1x (2x) 3x (*) X (P) | 1x (2x) 4x (*) X (P) | 1x (2N) 3x (*) X (P) | 1x (2N) 4x (*) X (P) | 1x (2x) 2N (*) X (P) | 1x (2x) 3N (*) X (P) | 1x (2N) 3N (*) X (P) when they.bid P Leaves the double in after (any auction) when asked limit_raise(t) 4{t} Accepts: game in {t} shows tp(t)>=14 when t is H | t is S 3N Accepts: 14+, game in notrump shows hcp>=14 when t is C | t is D 5{t} Accepts: 16+, game in {t} shows hcp>=16, t>=5 when t is C | t is D cheapest(t) Minimum: signs off after (1x) when u1n_play, passed_hand 1N Unusual 1NT: diamonds and hearts, five-four or better [alert] [artificial] shows D>=4, H>=4, D>=5 | H>=5, hcp>=6 when x is C 1N Unusual 1NT: clubs and hearts, five-four or better [alert] [artificial] shows C>=4, H>=4, C>=5 | H>=5, hcp>=6 when x is D 1N Unusual 1NT: both minors, five-four or better [alert] [artificial] shows C>=4, D>=4, C>=5 | D>=5, hcp>=6 when x is H | x is S after (1x) P (1y) when u1n_play, passed_hand, y is not x 1N Unusual 1NT: the two unbid suits, hearts and spades [alert] [artificial] shows H>=4, S>=4, H>=5 | S>=5, hcp>=6 when x is C, y is D 1N Unusual 1NT: the two unbid suits, diamonds and spades [alert] [artificial] shows D>=4, S>=4, D>=5 | S>=5, hcp>=6 when x is C, y is H 1N Unusual 1NT: the two unbid suits, diamonds and hearts [alert] [artificial] shows D>=4, H>=4, D>=5 | H>=5, hcp>=6 when x is C, y is S 1N Unusual 1NT: the two unbid suits, clubs and spades [alert] [artificial] shows C>=4, S>=4, C>=5 | S>=5, hcp>=6 when x is D, y is H 1N Unusual 1NT: the two unbid suits, clubs and hearts [alert] [artificial] shows C>=4, H>=4, C>=5 | H>=5, hcp>=6 when x is D, y is S 1N Unusual 1NT: the two unbid suits, both minors [alert] [artificial] shows C>=4, D>=4, C>=5 | D>=5, hcp>=6 when x is H, y is S after (1x) 1N (P) | (1x) 1N (X) | (1x) P (1y) 1N (P) | (1x) P (1y) 1N (X) when u1n_play | sandwich cheapest(C) Preference: clubs when partner.C>=4 cheapest(D) Preference: diamonds when partner.D>=4 cheapest(H) Preference: hearts when partner.H>=4 cheapest(S) Preference: spades when partner.S>=4 jump(C) Invitational: four or more clubs, 11+ shows C>=4, hcp>=11 when partner.C>=4 jump(D) Invitational: four or more diamonds, 11+ shows D>=4, hcp>=11 when partner.D>=4 jump(H) Invitational: four or more hearts, 11+ shows H>=4, hcp>=11 when partner.H>=4 jump(S) Invitational: four or more spades, 11+ shows S>=4, hcp>=11 when partner.S>=4 after (1x) | (1x) P (2x) | (1x) P (3x) | (1x) P (4x) when u4n_play 4N Unusual 4NT: both minors, six-six or seven-five [alert] [artificial] shows (C>=6, D>=6) | (C>=7, D>=5) | (C>=5, D>=7) when x is H | x is S 4N Unusual 4NT: diamonds and hearts, six-six or seven-five [alert] [artificial] shows (D>=6, H>=6) | (D>=7, H>=5) | (D>=5, H>=7) when x is C 4N Unusual 4NT: clubs and hearts, six-six or seven-five [alert] [artificial] shows (C>=6, H>=6) | (C>=7, H>=5) | (C>=5, H>=7) when x is D after (2x) | (3x) when u4n_play, x is not N, rho.hcp.max<=12, rho.x>=5 4N Unusual 4NT: both minors, five-five, strong [alert] [artificial] shows C>=5, D>=5, losers<=4 when x is H | x is S 4N Unusual 4NT: clubs and hearts, five-five, strong [alert] [artificial] shows C>=5, H>=5, losers<=4 when x is D 4N Unusual 4NT: diamonds and hearts, five-five, strong [alert] [artificial] shows D>=5, H>=5, losers<=4 when x is C after (4M) when u4n_play, rho.hcp.max<=12, rho.M>=5 4N Unusual 4NT: both minors, five-five [alert] [artificial] shows C>=5, D>=5, losers<=5 after (1x) 4N (P) | (2x) 4N (P) | (3x) 4N (P) | (4x) 4N (P) | (1x) P (2x) 4N (P) | (1x) P (3x) 4N (P) | (1x) P (4x) 4N (P) | (1x) 4N (X) | (2x) 4N (X) | (3x) 4N (X) | (4x) 4N (X) when u4n_play cheapest(C) Preference: clubs when partner.C>=5 cheapest(D) Preference: diamonds when partner.D>=5 cheapest(H) Preference: hearts when partner.H>=5 after (2x) when mich_play | mich_minors | mich_quasi | mich_majors | nlm, x is not N, rho.hcp.max<=12, rho.x>=5, !leaping 3{x} Michaels: five or more in each major [alert] [artificial] shows H>=5, S>=5, hcp+length_points>=13 when x is C | x is D 3{x} Michaels: five or more spades and a five-card minor [alert] [artificial] shows S>=5, C>=5 | D>=5, hcp+length_points>=13 when x is H 3{x} Michaels: five or more hearts and a five-card minor [alert] [artificial] shows H>=5, C>=5 | D>=5, hcp+length_points>=13 when x is S after (2x) P (P) | (2x) P (3x) when mich_play | mich_minors | mich_quasi | mich_majors | nlm, x is not N, lho.hcp.max<=12, lho.x>=5 cheapest(x) Michaels: five or more in each major [alert] [artificial] shows H>=5, S>=5, hcp+length_points>=11 when x is C | x is D cheapest(x) Michaels: five or more spades and a five-card minor [alert] [artificial] shows S>=5, C>=5 | D>=5, hcp+length_points>=11 when x is H cheapest(x) Michaels: five or more hearts and a five-card minor [alert] [artificial] shows H>=5, C>=5 | D>=5, hcp+length_points>=11 when x is S after (3x) when mich_play | mich_minors | mich_quasi | mich_majors | nlm, x is not N, rho.hcp.max<=12, rho.x>=5 4{x} Michaels: both majors, game values [alert] [artificial] shows H>=5, S>=5, hcp+length_points>=16 when x is C | x is D 4{x} Michaels: spades and a five-card minor, game values [alert] [artificial] shows S>=5, C>=5 | D>=5, hcp+length_points>=16 when x is H 4{x} Michaels: hearts and a five-card minor, game values [alert] [artificial] shows H>=5, C>=5 | D>=5, hcp+length_points>=16 when x is S after (2x) when leaping, x is not N, rho.hcp.max<=12, rho.x>=5 4C Leaping Michaels: five or more clubs and a five-card major [alert] shows C>=5, H>=5 | S>=5, losers<=5 when x is D 4D Leaping Michaels: five or more in each major [alert] [artificial] shows H>=5, S>=5, losers<=5 when x is D 4C Leaping Michaels: five or more clubs and spades [alert] shows C>=5, S>=5, losers<=5 when x is H 4D Leaping Michaels: five or more diamonds and spades [alert] shows D>=5, S>=5, losers<=5 when x is H 4C Leaping Michaels: five or more clubs and hearts [alert] shows C>=5, H>=5, losers<=5 when x is S 4D Leaping Michaels: five or more diamonds and hearts [alert] shows D>=5, H>=5, losers<=5 when x is S after (3x) when nlm, x is not N, rho.hcp.max<=12, rho.x>=5 4D Non-Leaping Michaels: diamonds and a major, five-five [alert] shows D>=5, H>=5 | S>=5, losers<=5 when x is C 4C Non-Leaping Michaels: clubs and a major, five-five [alert] shows C>=5, H>=5 | S>=5, losers<=5 when x is D 4C Non-Leaping Michaels: five or more clubs and spades [alert] shows C>=5, S>=5, losers<=5 when x is H 4D Non-Leaping Michaels: five or more diamonds and spades [alert] shows D>=5, S>=5, losers<=5 when x is H 4C Non-Leaping Michaels: five or more clubs and hearts [alert] shows C>=5, H>=5, losers<=5 when x is S 4D Non-Leaping Michaels: five or more diamonds and hearts [alert] shows D>=5, H>=5, losers<=5 when x is S after (2x) 3x (P) | (2x) P (P) 3x (P) | (2x) P (3x) 4x (P) | (3x) 4x (P) when x is not N, mich_play | mich_minors | mich_quasi | mich_majors | nlm 4H Game in hearts: four or more, or three and 8+ HCP shows H>=3, hcp>=8 | H>=4 when partner.H>=5 4S Game in spades: four or more, or three and 8+ HCP shows S>=3, hcp>=8 | S>=4 when partner.S>=5 3N To play: {x} held, no major fit, 10+ shows hcp>=10, stop(x) when H<=2 | maybe partner.H<=4, S<=2 | maybe partner.S<=4 cheapest(H) Preference: three or more hearts shows H>=3 when partner.H>=5 cheapest(S) Preference: three or more spades shows S>=3 when partner.S>=5 4H Pass or correct: play in partner's major [alert] when maybe partner.H<=4, maybe partner.S<=4, maybe partner.H>=5, maybe partner.S>=5, maybe partner.C<=4 | C<=2, maybe partner.D<=4 | D<=2 cheapest(C) Pass or correct: play in partner's minor [alert] when maybe partner.C<=4, maybe partner.D<=4, maybe partner.C>=5, maybe partner.D>=5 cheapest(C) Partner's clubs shows C>=3 when partner.C>=5 cheapest(D) Partner's diamonds shows D>=3 when partner.D>=5 cheapest(H) Preference: hearts when partner.H>=5, partner.S>=5 cheapest(S) Preference: spades when partner.H>=5, partner.S>=5 after (2x) 4y (P) when leaping, x is not N, y is C | y is D, y is not x 4H Game in hearts: four or more, or three and 8+ HCP shows H>=3, hcp>=8 | H>=4 when partner.H>=5 4S Game in spades: four or more, or three and 8+ HCP shows S>=3, hcp>=8 | S>=4 when partner.S>=5 3N To play: {x} held, no major fit, 10+ shows hcp>=10, stop(x) when H<=2 | maybe partner.H<=4, S<=2 | maybe partner.S<=4 cheapest(H) Preference: three or more hearts shows H>=3 when partner.H>=5 cheapest(S) Preference: three or more spades shows S>=3 when partner.S>=5 4H Pass or correct: play in partner's major [alert] when maybe partner.H<=4, maybe partner.S<=4, maybe partner.H>=5, maybe partner.S>=5, maybe partner.C<=4 | C<=2, maybe partner.D<=4 | D<=2 cheapest(C) Pass or correct: play in partner's minor [alert] when maybe partner.C<=4, maybe partner.D<=4, maybe partner.C>=5, maybe partner.D>=5 cheapest(C) Partner's clubs shows C>=3 when partner.C>=5 cheapest(D) Partner's diamonds shows D>=3 when partner.D>=5 cheapest(H) Preference: hearts when partner.H>=5, partner.S>=5 cheapest(S) Preference: spades when partner.H>=5, partner.S>=5 after (3x) 4y (P) when nlm, x is not N, y is C | y is D, y is not x 4H Game in hearts: four or more, or three and 8+ HCP shows H>=3, hcp>=8 | H>=4 when partner.H>=5 4S Game in spades: four or more, or three and 8+ HCP shows S>=3, hcp>=8 | S>=4 when partner.S>=5 3N To play: {x} held, no major fit, 10+ shows hcp>=10, stop(x) when H<=2 | maybe partner.H<=4, S<=2 | maybe partner.S<=4 cheapest(H) Preference: three or more hearts shows H>=3 when partner.H>=5 cheapest(S) Preference: three or more spades shows S>=3 when partner.S>=5 4H Pass or correct: play in partner's major [alert] when maybe partner.H<=4, maybe partner.S<=4, maybe partner.H>=5, maybe partner.S>=5, maybe partner.C<=4 | C<=2, maybe partner.D<=4 | D<=2 cheapest(C) Pass or correct: play in partner's minor [alert] when maybe partner.C<=4, maybe partner.D<=4, maybe partner.C>=5, maybe partner.D>=5 cheapest(C) Partner's clubs shows C>=3 when partner.C>=5 cheapest(D) Partner's diamonds shows D>=3 when partner.D>=5 cheapest(H) Preference: hearts when partner.H>=5, partner.S>=5 cheapest(S) Preference: spades when partner.H>=5, partner.S>=5 after (any auction) when asked poc_major P Hearts: my major shows H>=5 cheapest(S) Spades: my major shows S>=5 after (any auction) when asked poc_minor P Clubs: my minor shows C>=5 cheapest(D) Diamonds: my minor shows D>=5 after (1M) when djc_major is gambling | djc_major is strong 3{M} Jump cue bid: a solid seven-card suit, asks for a {M} stopper [alert] [artificial] shows (C>=7, quality(C)>=excellent) | (D>=7, quality(D)>=excellent) | (M is H, S>=7, quality(S)>=excellent) | (M is S, H>=7, quality(H)>=excellent) when !stop(M), djc_major is gambling | controls>=6 after (1m) when djc_minor is gambling 3{m} Jump cue bid: a solid seven-card suit, asks for a {m} stopper [alert] [artificial] shows (C>=7, quality(C)>=excellent, m is D) | (D>=7, quality(D)>=excellent, m is C) | (H>=7, quality(H)>=excellent) | (S>=7, quality(S)>=excellent) when !stop(m) after (1m) when djc_minor is majors 3{m} Jump cue bid: five or more in each major, preemptive [alert] [artificial] shows H>=5, S>=5, hcp<=10 after (1m) when djc_minor is preempt 3{m} Jump cue bid: a preempt in {m}, seven or more, up to 10 HCP [alert] shows m>=7, hcp<=10, quality(m)>=good after (any auction) when asked jump_cue_stopper 3N Their suit is held: to play shows stop(they.strain) 4C No stopper: pass or correct [alert] after (any auction) when asked poc_long P Clubs: my suit shows C>=7 cheapest(D) Diamonds: my suit shows D>=7 cheapest(H) Hearts: my suit shows H>=7 cheapest(S) Spades: my suit shows S>=7 after (1m) 3m (P) when djc_minor is majors cheapest(H) Preference: hearts cheapest(S) Preference: spades 4H Game in hearts: four or more, or three and 12+ shows H>=4 | (H>=3, hcp>=12) 4S Game in spades: four or more, or three and 12+ shows S>=4 | (S>=3, hcp>=12) == vs-1nt: Over their 1NT: what every defence shares file: conventions/competitive/vs-1nt.bid needs: base skills: competitive_bidding/defense_vs_1nt after (1N) when !def is other | dont_play 3S Preemptive: seven spades shows S>=7, hcp>=4, hcp+length_points<=11 3H Preemptive: seven hearts shows H>=7, hcp>=4, hcp+length_points<=11 3D Preemptive: seven diamonds shows D>=7, hcp>=4, hcp+length_points<=11 3C Preemptive: seven clubs shows C>=7, hcp>=4, hcp+length_points<=11 after (1N) | (1N) P (P) P No overcall after (any auction) when asked nt_majors, rho.last=P | rho.last=X P Hearts: to play shows H>=S when partner.last=2H 2H Preference: hearts shows H>=S 2S Preference: spades shows S>H 3H Invitational: four hearts shows H>=4, H>=S, tp(H)=10..12 3S Invitational: four spades shows S>=4, S>H, tp(S)=10..12 4H Game in hearts shows H>=3, H>=S, tp(H)>=13 4S Game in spades shows S>=3, S>H, tp(S)>=13 P Long clubs: to play shows C>=6, H<=2, S<=2 when partner.last=2C P Long diamonds: to play shows D>=6, H<=2, S<=2 when partner.last=2D 3C Long clubs: to play shows C>=6, H<=2, S<=2 when !partner.last=2C 3D Long diamonds: to play shows D>=6, H<=2, S<=2 when !partner.last=2D after (any auction) when asked nt_mm(M), rho.last=P | rho.last=X P {M} to play shows M>=2 3{M} Invitational raise shows M>=3, tp(M)=10..12 4{M} Game in {M} shows M>=3, tp(M)>=13 2N Which is your minor? [alert] [artificial] shows M<=1 2S Six or more spades: to play shows S>=6, M<=2 when M is H 3H Six or more hearts: to play shows H>=6, M<=2 when M is S 3C Six or more clubs: to play shows C>=6, M<=1 3D Six or more diamonds: to play shows D>=6, M<=1 after (any auction) when asked nt_which_minor, rho.last=P | rho.last=X 3C My minor is clubs shows C>=4, C>=D 3D My minor is diamonds shows D>=4, D>C after (any auction) when asked nt_minors, rho.last=P | rho.last=X 3C Preference: clubs shows C>D 3D Preference: diamonds shows D>=C 5C Game in clubs shows C>=4, C>D, tp(C)>=14 5D Game in diamonds shows D>=4, D>=C, tp(D)>=14 3H Six or more hearts: to play shows H>=6, C<=2, D<=2 3S Six or more spades: to play shows S>=6, C<=2, D<=2 after (any auction) when asked nt_pc(x), rho.last=P | rho.last=X P Support for {x}: to play shows x>=3 2D Which is your other suit? [alert] shows x<=2 when x is C 2H Pass or correct: which is your other suit? [alert] shows x<=2 when x is D after (any auction) when asked nt_other, rho.last=P | rho.last=X P My other suit is diamonds shows D>=4 when partner.last=2D P My other suit is hearts shows H>=4 when partner.last=2H 2H My other suit is hearts shows H>=4 2S My other suit is spades shows S>=4 after (any auction) when asked nt_one(x), rho.last=P | rho.last=X 3{x} Invitational raise shows x>=2, hcp=11..12 when x is H | x is S 4{x} Game in {x} shows x>=2, hcp>=13 when x is H | x is S P No further bid after (any auction) when asked nt_penalty, rho.last=P | rho.last=XX P Leaves the double in 2C Weak: five or more clubs shows C>=5, hcp<=4 2D Weak: five or more diamonds shows D>=5, hcp<=4 2H Weak: five or more hearts shows H>=5, hcp<=4 2S Weak: five or more spades shows S>=5, hcp<=4 == vs-preempts: Defence against preempts file: conventions/competitive/vs-preempts.bid needs: base skills: competitive_bidding/defense_vs_preempts, competitive_bidding/takeout_doubles, competitive_bidding/lebensohl after (2x) when x is not N, rho.hcp.max<=12 X Takeout: the unbid suits and 12+, or any 17+ shows hcp+length_points>=12, (S>=3 | x is S, H>=3 | x is H, D>=3 | x is D, C>=3 | x is C, x<=2) | (hcp>=17, x<=3) cheapest(S) Overcall: five or more spades, 12-16 shows S>=5, S>=H, S>=D, S>=C, hcp+length_points>=12, hcp<=16 when x is not S, quality(S)>=good | top5(S)>=3 | S>=6 | hcp+length_points>=13, cheapest_rank(S)<=13 | hcp+length_points>=13 cheapest(H) Overcall: five or more hearts, 12-16 shows H>=5, H>S, H>=D, H>=C, hcp+length_points>=12, hcp<=16 when x is not H, quality(H)>=good | top5(H)>=3 | H>=6 | hcp+length_points>=13, cheapest_rank(H)<=13 | hcp+length_points>=13 cheapest(D) Overcall: five or more diamonds, 12-16 shows D>=5, D>S, D>H, D>=C, hcp+length_points>=12, hcp<=16 when x is not D, quality(D)>=good | top5(D)>=3 | D>=6 | hcp+length_points>=13, cheapest_rank(D)<=13 | hcp+length_points>=13 cheapest(C) Overcall: five or more clubs, 12-16 shows C>=5, C>S, C>H, C>D, hcp+length_points>=12, hcp<=16 when x is not C, quality(C)>=good | top5(C)>=3 | C>=6 | hcp+length_points>=13, cheapest_rank(C)<=13 | hcp+length_points>=13 jump(S) Strong jump overcall: six or more spades, 15-16 shows S>=6, hcp=15..16 when x is not S jump(H) Strong jump overcall: six or more hearts, 15-16 shows H>=6, H>S, hcp=15..16 when x is not H, x is not S cheapest(N) 15-17 balanced, {x} stopped, no five-card major shows balanced, hcp=15..17, S<=4, H<=4 when stop(x) 4S Seven or more spades: game shows S>=7, hcp+length_points>=13 when x is not S 4H Seven or more hearts: game shows H>=7, H>S, hcp+length_points>=13 when x is not H P No overcall after (2x) P (P) when x is not N, lho.hcp.max<=12 X Reopening double: 12+, short in {x}, the unbid suits shows hcp+length_points>=12, (S>=3 | x is S, H>=3 | x is H, D>=3 | x is D, C>=3 | x is C, x<=2) | (hcp>=17, x<=3) cheapest(S) Balancing: five or more spades shows S>=5, S>=H, S>=D, S>=C, hcp+length_points>=9, hcp<=16 when x is not S, cheapest_rank(S)<=13 | hcp+length_points>=11 cheapest(H) Balancing: five or more hearts shows H>=5, H>S, H>=D, H>=C, hcp+length_points>=9, hcp<=16 when x is not H, cheapest_rank(H)<=13 | hcp+length_points>=11 cheapest(D) Balancing: five or more diamonds shows D>=5, D>S, D>H, D>=C, hcp+length_points>=9, hcp<=16 when x is not D, cheapest_rank(D)<=13 | hcp+length_points>=11 cheapest(C) Balancing: five or more clubs shows C>=5, C>S, C>H, C>D, hcp+length_points>=9, hcp<=16 when x is not C, cheapest_rank(C)<=13 | hcp+length_points>=11 jump(S) Six or more spades, 15-16 shows S>=6, hcp=15..16 when x is not S, cheapest_rank(S)<=13 jump(H) Six or more hearts, 15-16 shows H>=6, H>S, hcp=15..16 when x is not H, cheapest_rank(H)<=13, !rub | cheapest_rank(x)>18 cheapest(N) 16-18 balanced, {x} stopped shows balanced, hcp=16..18, S<=4, H<=4 when stop(x) P Nothing to reopen with after (3x) when x is not N, rho.hcp.max<=12 X Takeout: 12+, short in {x}, the unbid suits, or 17+ shows hcp+length_points>=12, (S>=3 | x is S, H>=3 | x is H, D>=3 | x is D, C>=3 | x is C, x<=2) | (hcp>=17, x<=3) cheapest(S) Overcall: five or more spades shows S>=5, S>=H, S>=D, S>=C, hcp+length_points>=12, hcp<=17 when x is not S, quality(S)>=good | top5(S)>=3 | S>=6 | hcp+length_points>=14, cheapest_rank(S)<=18 | hcp+length_points>=14 cheapest(H) Overcall: five or more hearts shows H>=5, H>S, H>=D, H>=C, hcp+length_points>=12, hcp<=17 when x is not H, quality(H)>=good | top5(H)>=3 | H>=6 | hcp+length_points>=14, cheapest_rank(H)<=18 | hcp+length_points>=14 cheapest(D) Overcall: five or more diamonds shows D>=5, D>S, D>H, D>=C, hcp+length_points>=12, hcp<=17 when x is not D, quality(D)>=good | top5(D)>=3 | D>=6 | hcp+length_points>=14, cheapest_rank(D)<=18 | hcp+length_points>=14 cheapest(C) Overcall: five or more clubs shows C>=5, C>S, C>H, C>D, hcp+length_points>=12, hcp<=17 when x is not C, quality(C)>=good | top5(C)>=3 | C>=6 | hcp+length_points>=14, cheapest_rank(C)<=18 | hcp+length_points>=14 3N 17-21 with {x} stopped shows hcp=17..21, S<=4, H<=4 when stop(x) 4S Seven or more spades: game shows S>=7, hcp+length_points>=13 when x is not S 4H Seven or more hearts: game shows H>=7, H>S, hcp+length_points>=13 when x is not H P No overcall after (3x) P (P) when x is not N, lho.hcp.max<=12 X Reopening double: 12+, short in {x}, the unbid suits shows hcp+length_points>=12, (S>=3 | x is S, H>=3 | x is H, D>=3 | x is D, C>=3 | x is C, x<=1) | (hcp>=17, x<=3) cheapest(S) Balancing: five or more spades shows S>=5, S>=H, S>=D, S>=C, hcp+length_points>=11, hcp<=17 when x is not S, cheapest_rank(S)<=18 | hcp+length_points>=13 cheapest(H) Balancing: five or more hearts shows H>=5, H>S, H>=D, H>=C, hcp+length_points>=11, hcp<=17 when x is not H, cheapest_rank(H)<=18 | hcp+length_points>=13 cheapest(D) Balancing: five or more diamonds shows D>=5, D>S, D>H, D>=C, hcp+length_points>=11, hcp<=17 when x is not D, cheapest_rank(D)<=18 | hcp+length_points>=13 cheapest(C) Balancing: five or more clubs shows C>=5, C>S, C>H, C>D, hcp+length_points>=11, hcp<=17 when x is not C, cheapest_rank(C)<=18 | hcp+length_points>=13 3N 17-20 with {x} stopped shows hcp=17..20, S<=4, H<=4 when stop(x) P Nothing to reopen with after (4x) when x is H, rho.hcp.max<=12 X Takeout: 14+, short in hearts shows hcp+length_points>=14, x<=2, S>=3 4S Five or more spades, 14+ shows S>=5, hcp+length_points>=14 cheapest(D) Five or more diamonds, 16+ shows D>=5, D>=C, hcp+length_points>=16 cheapest(C) Five or more clubs, 16+ shows C>=5, C>D, hcp+length_points>=16 P No overcall after (4x) when x is S, rho.hcp.max<=12 X Values: 17+, for penalty shows hcp>=17, x>=2 cheapest(D) Five or more diamonds, 16+ shows D>=5, D>=C, hcp+length_points>=16 cheapest(H) Five or more hearts, 16+ shows H>=5, H>=D, H>=C, hcp+length_points>=16 cheapest(C) Five or more clubs, 16+ shows C>=5, C>D, hcp+length_points>=16 P No overcall after (4x) P (P) when x is H, lho.hcp.max<=12 X Reopening double: 12+, no hearts shows hcp+length_points>=12, x<=1 4S Five or more spades, 13+ shows S>=5, hcp+length_points>=13 cheapest(D) Five or more diamonds, 15+ shows D>=5, D>=C, hcp+length_points>=15 cheapest(C) Five or more clubs, 15+ shows C>=5, C>D, hcp+length_points>=15 P Nothing to reopen with after (4x) X (P) | (4x) P (P) X (P) when x is H | x is S 4S Five or more spades shows S>=5 when x is H P Leaves the double in after (4x) when x is C | x is D, rho.hcp.max<=12 | rho.named(x) X Takeout: 14+, short in {x}, or 16+ shows (S>=3, H>=3, D>=3 | x is D, C>=3 | x is C, x<=2, hcp+length_points>=14) | (hcp>=16, x<=3) 4S Five or more spades, 14+ shows S>=5, S>=H, hcp+length_points>=14 4H Five or more hearts, 14+ shows H>=5, H>S, hcp+length_points>=14 cheapest(D) Five or more diamonds, 16+ shows D>=5, S<=4, H<=4, hcp+length_points>=16 when x is C cheapest(C) Five or more clubs, 16+ shows C>=5, S<=4, H<=4, hcp+length_points>=16 when x is D P No overcall after (4x) P (P) when x is C | x is D, lho.hcp.max<=12 | lho.named(x) X Reopening double: 12+, short in {x}, or 16+ shows (S>=3, H>=3, D>=3 | x is D, C>=3 | x is C, x<=2, hcp+length_points>=12) | (hcp>=16, x<=3) 4S Five or more spades, 13+ shows S>=5, S>=H, hcp+length_points>=13 4H Five or more hearts, 13+ shows H>=5, H>S, hcp+length_points>=13 P Nothing to reopen with after (4x) X (P) | (4x) P (P) X (P) when x is C | x is D 4H Four or more hearts shows H>=4, H>=S 4S Four or more spades shows S>=4, S>H cheapest(D) Five or more diamonds shows D>=5, S<=3, H<=3, x<=2 when x is C cheapest(C) Five or more clubs shows C>=5, S<=3, H<=3, x<=2 when x is D P Leaves the double in after (2x) P (4x) | (2x) P (5x) | (3x) P (4x) | (3x) P (5x) when x is not N, lho.hcp.max<=12 cheapest(S) Six or more spades, 16+ shows S>=6, S>=H, hcp+length_points>=16 when x is not S, cheapest_rank(S)<=23 | hcp+length_points>=18 cheapest(H) Six or more hearts, 16+ shows H>=6, H>S, hcp+length_points>=16 when x is not H, cheapest_rank(H)<=23 | hcp+length_points>=18 cheapest(D) Six or more diamonds, 18+ shows D>=6, D>S, D>H, hcp+length_points>=18 when x is not D cheapest(C) Six or more clubs, 18+ shows C>=6, C>S, C>H, C>D, hcp+length_points>=18 when x is not C X Takeout: 16+, short in {x} shows hcp+length_points>=16, x<=1, S>=3 | x is S, H>=3 | x is H, D>=3 | x is D, C>=3 | x is C after (2x) P (4x) X (P) | (2x) P (5x) X (P) | (3x) P (4x) X (P) | (3x) P (5x) X (P) when x is not N cheapest(S) Five or more spades and no defence shows S>=5, S>=H, x<=1 when x is not S cheapest(H) Five or more hearts and no defence shows H>=5, H>S, x<=1 when x is not H P Leaves the double in after (2x) X (P) | (3x) X (P) | (2x) P (P) X (P) | (3x) P (P) X (P) when x is not C P Penalty: five of their suit with two top honours shows x>=5, quality(x)>=good | top5(x)>=3 P Penalty: four of their suit, a flat hand and 10+ shows x=4, hcp>=10, stop(x), S<=4, H<=4, D<=4, C<=4 cheapest(x) Cue bid: 13+, forcing to game [alert] [artificial] shows hcp+length_points>=13 when !(leb | rub) | cheapest_rank(x)>18 4S Game: four or more spades, 11+ shows S>=4, S>=H, hcp+length_points=11..12 when x is not S 4H Game: four or more hearts, 11+ shows H>=4, H>S, hcp+length_points=11..12 when x is not H jump(S) Invitational: five or more spades, 8-10 shows S>=5, S>=H, hcp+length_points=8..10 when x is not S, cheapest_rank(S)<=13, !rub | cheapest_rank(x)>18 jump(H) Invitational: five or more hearts, 8-10 shows H>=5, H>S, hcp+length_points=8..10 when x is not H, cheapest_rank(H)<=13, !rub | cheapest_rank(x)>18 cheapest(N) 11-12 with {x} stopped shows hcp+length_points=11..12, S<=3 | x is S, H<=3 | x is H when stop(x), cheapest_rank(x)<14, !(leb | rub) | cheapest_rank(x)>18 3N Game with {x} stopped, no four-card major shows hcp+length_points>=13 | (hcp+length_points>=11, cheapest_rank(x)>=14), S<=3 | x is S, H<=3 | x is H when stop(x), !(leb | rub) | cheapest_rank(x)>18 cheapest(S) Four or more spades, 0-10 shows S>=4, S>=H, hcp+length_points<=10 when x is not S, !(leb | rub) | cheapest_rank(x)>18 | cheapest_rank(S)<=13 cheapest(H) Four or more hearts, 0-10 shows H>=4, H>S, hcp+length_points<=10 when x is not H, !(leb | rub) | cheapest_rank(x)>18 | cheapest_rank(H)<=13 cheapest(D) Four or more diamonds, 0-10, no four-card major shows D>=4, D>=C, hcp+length_points<=10, S<=3 | x is S, H<=3 | x is H when x is not D, !(leb | rub) | cheapest_rank(x)>18 | cheapest_rank(D)<=13 cheapest(C) Four or more clubs, 0-10, no four-card major shows C>=4, C>D | x is D, hcp+length_points<=10, S<=3 | x is S, H<=3 | x is H when x is not C, !(leb | rub) | cheapest_rank(x)>18 | cheapest_rank(C)<=13 cheapest(S) No four-card suit: spades when x is not S, S>=H, S>=D, S>=C, !(leb | rub) | cheapest_rank(x)>18 | cheapest_rank(S)<=13 cheapest(H) No four-card suit: hearts when x is not H, H>=D, H>=C, !(leb | rub) | cheapest_rank(x)>18 | cheapest_rank(H)<=13 cheapest(D) No four-card suit: diamonds when x is not D, D>=C, !(leb | rub) | cheapest_rank(x)>18 | cheapest_rank(D)<=13 cheapest(C) No four-card suit: clubs when x is not C, !(leb | rub) | cheapest_rank(x)>18 | cheapest_rank(C)<=13 after (2x) X (P) 2y (P) | (2x) X (P) 3y (P) | (3x) X (P) 3y (P) | (3x) X (P) 4y (P) | (2x) P (P) X (P) 2y (P) | (2x) P (P) X (P) 3y (P) when y is not x, x is not C P Minimum double shows hcp<=16 4{y} Game: four-card support, 17+ shows y>=4, hcp>=17 when y is H | y is S cheapest(y) Raise: four-card support, 17+ shows y>=4, hcp>=17 3N 18+ with {x} stopped shows hcp>=18, stop(x) cheapest(S) 17+ and five or more spades shows S>=5, hcp>=17 when x is not S, y is not S cheapest(H) 17+ and five or more hearts shows H>=5, S<=4, hcp>=17 when x is not H, y is not H after (2x) X (P) 2N (P) when x is not C, !leb, !rub 3N Accepts the invitation: 14+ shows hcp>=14 P Declines shows hcp<=13 after (2x) X (P) | (2x) P (P) X (P) when x is not C, leb, !rub 2N Lebensohl: relay to 3C, weak or game values [alert] [artificial] shows (hcp<=8, C>=4 | (D>=4, x is H | x is S) | (H>=4, x is S), S<=3 | x is S | cheapest_rank(S)>=15, H<=3 | x is H | cheapest_rank(H)>=15) | (hcp>=13, stop(x), S<=4 | x is S, H<=4 | x is H) cheapest(x) Cue bid: game values, a four-card major, no {x} stopper [alert] [artificial] shows hcp>=13, (S=4, x is not S) | (H=4, x is not H), S<=4 | x is S, H<=4 | x is H when !stop(x) 3N Game values, no four-card major, no stopper in {x} shows hcp>=13, S<=3 | x is S, H<=3 | x is H when !stop(x) cheapest(S) Constructive: four or more spades, 9-12 shows S>=4, S>=H, hcp=9..12 when x is not S, cheapest_rank(S)>=15 cheapest(H) Constructive: four or more hearts, 9-12 shows H>=4, H>S, hcp=9..12 when x is not H, cheapest_rank(H)>=15 cheapest(D) Constructive: four or more diamonds, 9-12 shows D>=4, D>=C, hcp=9..12, S<=3 | x is S, H<=3 | x is H when x is not D, cheapest_rank(D)>=15 cheapest(C) Constructive: four or more clubs, 9-12 shows C>=4, C>D | x is D, hcp=9..12, S<=3 | x is S, H<=3 | x is H when x is not C, cheapest_rank(C)>=15 4S Game: five or more spades shows S>=5, S>=H, hcp+length_points>=11 when x is not S 4H Game: five or more hearts shows H>=5, H>S, hcp+length_points>=11 when x is not H P Leaves the double in: five or more {x} shows x>=5, hcp<=8 2N Lebensohl: relay to 3C [alert] [artificial] after (2x) X (P) 2N (P) | (2x) P (P) X (P) 2N (P) when x is not C, leb, !rub 3N Game: 19+ with {x} stopped shows hcp>=19, stop(x) 3C Lebensohl: as asked [alert] [artificial] after (2x) X (P) 2N (P) 3C (P) | (2x) P (P) X (P) 2N (P) 3C (P) when x is not C, leb, !rub P Weak, clubs shows C>=4, hcp<=8 cheapest(D) Weak, diamonds: to play shows D>=4, D>C, hcp<=8 when x is not D cheapest(H) Weak, hearts: to play shows H>=4, H>D, H>C, hcp<=8 when x is S cheapest(x) Slow cue: game values, four of an unbid major, {x} stopped [alert] [artificial] shows hcp>=13, stop(x), (S=4, x is not S) | (H=4, x is not H) 3N Slow 3NT: game values with {x} stopped, no four-card major shows hcp>=13, stop(x) P Weak: to play in clubs after (2x) X (P) 3x (P) | (2x) P (P) X (P) 3x (P) | (2x) X (P) 2N (P) 3C (P) 3x (P) | (2x) P (P) X (P) 2N (P) 3C (P) 3x (P) when x is not C, leb, !rub cheapest(H) Four hearts shows H>=4 when x is not H cheapest(S) Four spades shows S>=4 when x is not S 3N No four-card major cheapest(D) No major, no stopper: diamonds shows D>=4, D>=C when x is not D after (2x) 2y (P) | (2x) 3y (P) | (3x) 3y (P) | (3x) 4y (P) | (2x) P (P) 2y (P) | (2x) P (P) 3y (P) when y is not x, x is not C 4{y} Game: three-card support, 12+ shows y>=3, hcp+length_points>=12 when y is H | y is S cheapest(y) Raise: three-card support, 8-11 shows y>=3, hcp+length_points=8..11 3N Game: 12+ with {x} stopped shows hcp+length_points>=12, stop(x), y<=2 P Nothing to add after (2x) 2N (P) when x is not C 3N Game: 9+ shows hcp>=9, S<=5, H<=5 4S Game: six or more spades, 8+ shows S>=6, hcp>=8 when x is not S 4H Game: six or more hearts, 8+ shows H>=6, hcp>=8 when x is not H P No game shows hcp<=8 after 2x (X) | 2x (2y) | 2x (3y) | 2x (2N) | 3x (X) | 3x (3y) | 3x (4y) | 3x (3N) | 4x (X) | 4x (4y) | 4x (5y) when x is not N P No further bid after 2x (X) P (*) | 2x (2y) P (*) | 2x (3y) P (*) | 2x (2N) P (*) | 3x (X) P (*) | 3x (3y) P (*) | 3x (4y) P (*) | 4x (X) P (*) | 4x (4y) P (*) | 4x (5y) P (*) when x is not N P No further bid == vs-takeout-double: Raises over their takeout double: Jordan 2NT and BROMAD file: conventions/competitive/vs-takeout-double.bid needs: base, after-interference skills: competitive_bidding/jordan_2nt, competitive_bidding/bromad after 1M (X) when jordan, !passed_hand | !drury_comp | !(drury | rdrury) 2N Jordan 2NT: limit raise or better, four or more {M} [alert] [artificial] shows M>=4, tp(M)>=10 when system is not brill 2N Jordan 2NT: limit raise or better, three or more {M} [alert] [artificial] shows M>=3, tp(M)>=10 when system is brill 3{M} Preemptive raise: four or more {M}, up to 7 shows M>=4, tp(M)<=7 when !bromad after 1M (X) when bromad, !tfr, !passed_hand | !drury_comp | !(drury | rdrury) 2C BROMAD: constructive raise, three {M}, 7-9 [alert] [artificial] shows M=3, tp(M)>=7, tp(M)<=9 2D BROMAD: limit raise or better, three {M} [alert] [artificial] shows M=3, tp(M)>=10 3C BROMAD: constructive raise, four or more {M}, 7-9 [alert] [artificial] shows M>=4, tp(M)>=7, tp(M)<=9 2{M} BROMAD: preemptive raise, three {M}, up to 6 shows M=3, tp(M)<=6 3{M} BROMAD: preemptive raise, four or more {M}, up to 6 shows M>=4, tp(M)<=6 after 1M (X) when bromad, !jordan, !tfr 3D BROMAD: limit raise or better, four or more {M} [alert] [artificial] shows M>=4, tp(M)>=10 2N BROMAD: weak, five-five or better in the minors [alert] [artificial] shows C>=5, D>=5, hcp<=6, M<=2 after 1M (X) 2C (P) | 1M (X) 2C (XX) when bromad 4{M} Game: 17+ shows tp(M)>=17 3{M} Invites game: 15-16 shows tp(M)>=15, tp(M)<=16 2{M} Minimum: nothing more after 1M (X) 3C (P) | 1M (X) 3C (XX) when bromad 4{M} Game: 15+ shows tp(M)>=15 3{M} Minimum: nothing more after 1M (X) 2C (P) 3M (P) when bromad 4{M} Accepts: the top of the constructive raise shows tp(M)>=9 P Declines after 1M (X) 2N (P) 3M (P) | 1M (X) 2D (P) 2M (P) | 1M (X) 3D (P) 3M (P) when jordan | bromad 4{M} Game: 13+ opposite opener's minimum shows tp(M)>=13 P Limit raise only == western-cue: Western cue bid: three of their suit asks for a stopper for 3NT file: conventions/competitive/western-cue.bid needs: base skills: bidding_conventions/western_cuebid define wc_values = points+partner.points.min>=25 define wc_no_major_fit = we.fit(S).min<=7, we.fit(H).min<=7 after (any auction) when western, they.bid, !asked, !answered western, me.bids>=1, partner.bids>=1, we.trump is none | we.trump is C | we.trump is D cheapest(C) Western cue: a club stopper for 3NT? [alert] [artificial] when they.strain is C, cheapest_rank(C)<=15, !stop(C), wc_values, wc_no_major_fit cheapest(D) Western cue: a diamond stopper for 3NT? [alert] [artificial] when they.strain is D, cheapest_rank(D)<=16, !stop(D), wc_values, wc_no_major_fit cheapest(H) Western cue: a heart stopper for 3NT? [alert] [artificial] when they.strain is H, cheapest_rank(H)<=17, !stop(H), wc_values, wc_no_major_fit cheapest(S) Western cue: a spade stopper for 3NT? [alert] [artificial] when they.strain is S, cheapest_rank(S)<=18, !stop(S), wc_values, wc_no_major_fit after (any auction) when western, asked western(y) 3N A stopper in {y}: 3NT shows stop(y) cheapest(C) No stopper in {y}: clubs when y is not C, C>=5 | we.fit(C).min>=7 cheapest(D) No stopper in {y}: diamonds when y is not D, D>=5 | we.fit(D).min>=7 cheapest(H) No stopper in {y}: hearts when y is not H, H>=5 | we.fit(H).min>=7 cheapest(S) No stopper in {y}: spades when y is not S, S>=5 | we.fit(S).min>=7 3N 3NT: no stopper, no suit to show after (any auction) when western, answered western(y) P Plays 3NT when partner.last=3N 4H Game in the heart fit when we.fit(H).min>=8 4S Game in the spade fit when we.fit(S).min>=8 5C Game in clubs: no stopper when we.fit(C).min>=8 5D Game in diamonds: no stopper when we.fit(D).min>=8 P Plays partner's game when partner.last=4H | partner.last=4S | partner.last=5C | partner.last=5D == bergen: Bergen raises: four-card raises at the three level file: conventions/majors/bergen.bid needs: responses skills: bidding_conventions/bergen_raises, bidding_conventions/reverse_bergen_raises define bergen_constructive(M) = (bergen, !reverse, partner.last=3C) | (reverse, partner.last=3D) define bergen_limit(M) = (bergen, !reverse, partner.last=3D) | (reverse, partner.last=3C) after 1M (P) when bergen | reverse 3C Bergen: constructive raise, 4 {M}, 7-10 support points [alert] [artificial] shows M>=4, tp(M)=7..10, hcp>=5 when !reverse, M=4 | hcp>=8 3D Bergen: limit raise, 4 {M}, 11-12 support points [alert] [artificial] shows M>=4, tp(M)=11..12, hcp<=12 when !reverse, !passed_hand | (!drury, !drury_r) 3D Reverse Bergen: constructive raise, 4 {M}, 7-10 support points [alert] [artificial] shows M>=4, tp(M)=7..10, hcp>=5 when reverse, M=4 | hcp>=8 3C Reverse Bergen: limit raise, 4 {M}, 11-12 support points [alert] [artificial] shows M>=4, tp(M)=11..12, hcp<=12 when reverse, !passed_hand | (!drury, !drury_r) 3M Bergen: preemptive raise, four {M}, about 3-6 shows M>=4, tp(M)<=7, hcp<=6, hcp>=2 when M=4 | hcp<=3 after 1M (P) 3x (P) when x is C | x is D, bergen | reverse, bergen_constructive(M) 4M Game opposite a constructive raise: 17-20 shows tp(M)=17..20 when M is S | x is C 4M Game opposite a constructive raise: 16-20 shows tp(M)=16..20 when M is H, x is D 4M Game opposite a constructive raise shows tp(M)>=16 3D Game try opposite a constructive raise: 15-16 [alert] [artificial] shows tp(M)=15..16 when x is C 3H Game try opposite a constructive raise: 15-16 [alert] [artificial] shows tp(M)=15..16 when x is D, M is S 3M Sign off opposite a constructive raise shows tp(M)<=14 when M is S | x is C 3M Sign off opposite a constructive raise shows tp(M)<=15 when M is H, x is D after 1M (P) 3x (P) when x is C | x is D, bergen | reverse, bergen_limit(M) 4M Game opposite a limit raise: 14-18 shows tp(M)=14..18 4M Game opposite a limit raise shows tp(M)>=14 3M Sign off opposite a limit raise: a minimum shows tp(M)<=13 after 1M (P) 3C (P) 3D (P) when bergen, !reverse 4M Accepts the game try: the top of the constructive raise shows tp(M)>=9 3M Declines the game try after 1S (P) 3D (P) 3H (P) when reverse 4S Accepts the game try: the top of the constructive raise shows tp(S)>=9 3S Declines the game try after 1M (P) 3C (P) 3D (P) 3M (P) when bergen, !reverse P No further bid shows tp(M)<=16 4M Game after the declined try: extra values shows tp(M)>=17 after 1S (P) 3D (P) 3H (P) 3S (P) when reverse P No further bid shows tp(S)<=16 4S Game after the declined try: extra values shows tp(S)>=17 after 1M (P) 3x (P) 3M (P) when x is C | x is D, bergen | reverse P No further bid == drury: Drury: a passed hand's 2♣ limit raise file: conventions/majors/drury.bid needs: responses skills: bidding_conventions/drury, bidding_conventions/reverse_drury, bidding_conventions/two_way_drury after 1M (P) when passed_hand, drury | reverse 2C Drury: 3+ {M}, limit-raise values [alert] [artificial] shows M>=3, tp(M)=10..12, hcp<=12 when !two_way 2C Drury: exactly three {M}, limit-raise values [alert] [artificial] shows M=3, tp(M)=10..12, hcp<=12 when two_way 2D Two-way Drury: 4+ {M}, limit-raise values [alert] [artificial] shows M>=4, tp(M)=10..12, hcp<=12 when two_way after 1M (X) | 1M (1x) when passed_hand, in_comp, drury | reverse 2C Drury: 3+ {M}, limit-raise values [alert] [artificial] shows M>=3, tp(M)=10..12, hcp<=12 after (any auction) when asked drury(M), rho.last=P, partner.last=2C 2M Sub-minimum: no game opposite a limit raise shows tp(M)<=12 when reverse 2D Reverse Drury: a full opening, 13-14 support points [alert] [artificial] shows tp(M)=13..14 when reverse 2D Drury: a sub-minimum opening [alert] [artificial] shows tp(M)<=12 when !reverse 2M A full opening, 13-14 support points shows tp(M)=13..14 when !reverse 4M Game: 15+ support points shows tp(M)>=15 after (any auction) when asked drury(M), rho.last=P, partner.last=2D 2M Sub-minimum: no game opposite a four-card limit raise shows tp(M)<=12 4M Game opposite a four-card limit raise shows tp(M)>=13 after (any auction) when answered drury(M), partner.last=2{M}, reverse P Partner is sub-minimum: play 2{M} after (any auction) when answered drury(M), partner.last=2D, !reverse 2M Partner is sub-minimum: play 2{M} after (any auction) when answered drury(M), partner.last=2D, reverse 4M Game facing a full opening shows tp(M)>=12 | (tp(M)=11, M>=4) 2M Sign off facing a full opening after (any auction) when answered drury(M), partner.last=2{M}, !reverse 4M Game facing a full opening shows tp(M)>=12 | (tp(M)=11, M>=4) P No game facing a full opening after 1M (P) 2C (P) 2D (P) 2M (P) P No further bid == game-tries: Help-suit and two-way game tries after 1M-2M file: conventions/majors/game-tries.bid needs: rebids skills: bidding_conventions/help_suit_game_try, bidding_conventions/two_way_game_tries define try_values(M) = tp(M)=17..18, hcp>=14 define small_short(x) = x=0 | (x=1, !has(K,x), !has(Q,x), !has(J,x)) define short_side(M) = (M is not C, small_short(C)) | (M is not D, small_short(D)) | (M is not H, small_short(H)) | (M is not S, small_short(S)) define needs_help(x) = x>=3, !(has(A,x), has(K,x)), !(has(A,x), has(Q,x)), !(has(K,x), has(Q,x)) define long_try(x) = x>=3, has(A,x) | has(K,x) | has(Q,x) define helps(x) = x>=4, has(A,x) | has(K,x) | has(Q,x) | x<=1 | (x=2, has(A,x) | has(K,x)) | (has(A,x), has(K,x)) | (has(A,x), has(Q,x)) | (has(K,x), has(Q,x)) define wasted(x) = has(K,x) | has(Q,x) | has(J,x) after 1H (P) 2H (P) when two_way 2S Short-suit game try: a singleton or void somewhere, 17-18 [alert] [artificial] shows try_values(H), short_side(H), H>=5 2N Long-suit game try in spades: four good spades, 17-18 [alert] [artificial] shows try_values(H), S>=4, has(A,S) | (has(K,S), has(Q,S)) after 1S (P) 2S (P) when two_way 2N Short-suit game try: a singleton or void somewhere, 17-18 [alert] [artificial] shows try_values(S), short_side(S), S>=5 after 1H (P) 2H (P) when help, !two_way 2S Help-suit game try: help wanted in spades, 17-18 shows try_values(H), needs_help(S) after 1M (P) 2M (P) when two_way 3x Long-suit game try: 3+ {x} with honours, 17-18 shows try_values(M), long_try(x) when x is not M, M is S | x is not S after 1M (P) 2M (P) when help, !two_way 3x Help-suit game try: help wanted in {x}, 17-18 shows try_values(M), needs_help(x) when x is not M, M is S | x is not S after (any auction) when asked short_try(M), rho.last=P 4M Accepts the short-suit try: the top of the raise shows tp(M)>=10 3M Declines the short-suit try: the bottom of the raise shows tp(M)<=6 2N Where is the shortness? [alert] [artificial] shows tp(M)=7..9 when M is H 3C Where is the shortness? [alert] [artificial] shows tp(M)=7..9 when M is S after (any auction) when asked where_short(M), rho.last=P 3x Shortness in {x} [alert] [artificial] shows x<=1 when x is not M, M is S | x is not S, M is H | x is not C 3M Shortness: ♠ over 1♥, ♣ over 1♠ [alert] [artificial] shows S<=1 | M is S, C<=1 | M is H after (any auction) when answered where_short(M), rho.last=P 4M No wasted honours opposite the shortness: game shows !wasted(C) | !partner.last=3C, !wasted(D) | !partner.last=3D, !wasted(H) | !partner.last=3H when !partner.last=3{M} 4M No wasted honours in either step suit: game shows !wasted(S) | M is S, !wasted(C) | M is H when partner.last=3{M} P Wasted honours opposite the shortness: no game when partner.last=3{M} 3M Wasted honours opposite the shortness: no game when !partner.last=3{M} after (any auction) when asked help_try(x), rho.last=P 4{trump} Accepts the help-suit try shows helps(x) | tp(trump)>=10 | (tp(trump)>=8, has(A,x) | has(K,x) | x=2) 3{trump} Declines the help-suit try after (any auction) when answered help_try(x), rho.last=P, partner.last=3{trump} P No further bid after (any auction) when answered short_try(M), rho.last=P, partner.last=3{M} P No further bid after 1H (P) 2H (P) 2S (P) 2N (P) 3x (P) 3H (P) when two_way, x is not H P No further bid after 1S (P) 2S (P) 2N (P) 3C (P) 3x (P) 3S (P) when two_way, x is not S P No further bid == gazzilli: Gazzilli 2♣ after 1M-1NT and 1♥-1♠ file: conventions/majors/gazzilli.bid card: major_openings.gazzilli.play needs: rebids skills: bidding_conventions/gazzilli define gazzilli_strong(M) = hcp>=16, !(balanced, hcp=18..19), !(M>=6, hcp<=18) after 1M (P) 1N (P) 2C Gazzilli: 11-15 with four or more clubs, or any 16+ [alert] [artificial] shows gazzilli_strong(M) | (hcp<=15, C>=4) 3x Five-five, 13-15: {M} and {x} shows M>=5, x>=5, hcp=13..15 when x is not M, M is S | x is not S after 1H (P) 1S (P) 3x Five-five, 13-15: hearts and {x} shows H>=5, x>=5, hcp=13..15, S<=3 when x is C | x is D 2C Gazzilli: 11-15 with four or more clubs, or any 16+ [alert] [artificial] shows gazzilli_strong(H) | (hcp<=15, C>=4), S<=3 after 1M (P) 1N (P) 3x (P) when x is not M, M is S | x is not S 4M Game in {M}: two or more and 9+ shows M>=2, points>=9 3M Preference for {M} shows M>=2 3N No fit for {M}, 10+ shows points>=10 P Weak: plays {x} after 1H (P) 1S (P) 3x (P) when x is C | x is D 4H Game in hearts: two or more and 9+ shows H>=2, points>=9 3H Preference for hearts shows H>=2 3N No fit for hearts, 10+ shows points>=10 P Weak: plays {x} after 1M (P) 1N (P) 3x (P) 3M (P) | 1M (P) 1N (P) 3x (P) 3N (P) when x is not M P No further bid after 1H (P) 1S (P) 3x (P) 3H (P) | 1H (P) 1S (P) 3x (P) 3N (P) when x is C | x is D P No further bid after (any auction) when asked gazzilli(M), rho.last=P, partner.last=2C 2D Gazzilli: 8+, asks [alert] [artificial] shows hcp>=8 2M 5-7, two or more {M} shows hcp<=7, M>=2 2H 5-7, five or more hearts, no spade fit shows hcp<=7, H>=5, S<=1 when M is S 2S 5-7, five or more spades, no heart fit shows hcp<=7, S>=5, H<=1 when M is H, me.last=1S 3C 5-7, six or more clubs shows hcp<=7, C>=6, M<=1 3D 5-7, six or more diamonds shows hcp<=7, D>=6, M<=1 2N 5-7, no fit for {M} shows hcp<=7, M<=1 after (any auction) when answered gazzilli(M), rho.last=P, partner.last=2D 2M Gazzilli: the natural minimum, four or more clubs shows hcp<=15 2N Gazzilli: 16-17, balanced shows hcp=16..17, balanced 3N Gazzilli: 20-21, balanced shows hcp>=20, balanced 3M Gazzilli: 16+, six or more {M} shows hcp>=16, M>=6 3C Gazzilli: 16+, four or more clubs shows hcp>=16, C>=4, C>=D, M<=6 3D Gazzilli: 16+, four or more diamonds shows hcp>=16, D>=4, D>C, M<=6 3H Gazzilli: 16+, four or more hearts shows hcp>=16, H>=4 when M is S 4M Gazzilli: 16+, game shows hcp>=16 after 1H (P) 1N (P) 2C (P) 2D (P) 2S Gazzilli: 16+, four or more spades shows hcp>=16, S>=4 after 1H (P) 1S (P) 2C (P) 2D (P) 2S Gazzilli: 16+, three spades shows hcp>=16, S=3 after 1M (P) 1N (P) 2C (P) 2D (P) 2M (P) 4M Game opposite a minimum: 12+ with two or more {M} shows points>=12, M>=2 3M Invites opposite a minimum: 10-11 shows points=10..11, M>=2 2N No fit for {M}, 8-10 shows M<=1, points<=10 3N No fit for {M}, 11+ shows M<=1, points>=11 P No game opposite a minimum after 1H (P) 1S (P) 2C (P) 2D (P) 2H (P) 2S Five or more spades, no heart fit: to play shows S>=5, H<=1, points<=10 2N No fit for hearts, 8-10 shows H<=1, S<=4, points<=10 3N No fit for hearts, 11+ shows H<=1, points>=11 4H Game opposite a minimum: 12+ with two or more hearts shows points>=12, H>=2 3H Invites opposite a minimum: 10-11 shows points=10..11, H>=2 P No game opposite a minimum after 1M (P) 1N (P) 2C (P) 2D (P) 2N (P) 3N Game opposite 16-17: 9+ shows points>=9 P No game opposite 16-17 after 1M (P) 1N (P) 2C (P) 2D (P) 3M (P) 4M Game in the six-card major after 1M (P) 1N (P) 2C (P) 2D (P) 3x (P) | 1M (P) 1N (P) 2C (P) 2D (P) 2x (P) when x is not M, we.forcing=game 4M Game in the major: three of them shows M>=3 3N Game: no fit for {M} after 1H (P) 1S (P) 2C (P) 2D (P) 2N (P) 3N Game opposite 16-17: 9+ shows points>=9 P No game opposite 16-17 after 1H (P) 1S (P) 2C (P) 2D (P) 3H (P) 4H Game in the six-card major after 1H (P) 1S (P) 2C (P) 2D (P) 2S (P) 4S Game in the 4-3 or better spade fit after 1H (P) 1S (P) 2C (P) 2D (P) 3x (P) when x is C | x is D 4H Game in hearts: three of them shows H>=3 3N Game: no fit for hearts after 1M (P) 1N (P) 2C (P) 2D (P) 2M (P) 2N (P) | 1H (P) 1S (P) 2C (P) 2D (P) 2H (P) 2N (P) 3C Five or more clubs: to play shows C>=5 P Minimum: no game after 1H (P) 1S (P) 2C (P) 2D (P) 2H (P) 2S (P) P Minimum: partner's spades after 1M (P) 1N (P) 2C (P) 2D (P) 3x (P) 3N (P) when x is not M 4M Six or more {M}: game in the major shows M>=6 after 1H (P) 1S (P) 2C (P) 2D (P) 3x (P) 3N (P) when x is C | x is D 4H Six or more hearts: game in the major shows H>=6 after (any auction) when answered gazzilli(M), rho.last=P P Gazzilli: no game opposite 5-7 shows hcp<=18 when !partner.last=2D 3M Invites with six or more {M}: 19-20 shows hcp=19..20, M>=6 when !partner.last=2D 4M Game: 21+ with six or more {M} shows hcp>=21, M>=6 when !partner.last=2D 3N Game: 19+, no six-card {M} shows hcp>=19, M<=5 when !partner.last=2D 3C Natural clubs, minimum: to play shows hcp<=15, C>=5 when partner.last=2N == impossible-2s: Impossible 2♠ file: conventions/majors/impossible-2s.bid card: major_openings.impossible_2s.play needs: responder-rebids skills: bidding_conventions/impossible_2s after 1H (P) 1N (P) 2m (P) 2S Impossible 2♠: good raise of {m}, 4+ {m}, 11+ points [alert] [artificial] shows m>=4, H<=2, points>=11 after 1H (P) 1N (P) 2C (P) 2S (P) 3C Minimum: no game opposite the good raise shows tp(C)<=14 3N Game: 15+, spades and diamonds stopped shows tp(C)>=15, stop(S), stop(D) 3D Diamond stopper, not spades: looking for 3NT shows tp(C)>=15, stop(D), !stop(S) 3S Spade stopper, not diamonds: looking for 3NT shows tp(C)>=15, stop(S), !stop(D) 5C Game in clubs: 15+, neither suit stopped shows tp(C)>=15 after 1H (P) 1N (P) 2D (P) 2S (P) 3D Minimum: no game opposite the good raise shows tp(D)<=14 3N Game: 15+, spades and clubs stopped shows tp(D)>=15, stop(S), stop(C) 3C Club stopper, not spades: looking for 3NT shows tp(D)>=15, stop(C), !stop(S) 3S Spade stopper, not clubs: looking for 3NT shows tp(D)>=15, stop(S), !stop(C) 5D Game in diamonds: 15+, neither suit stopped shows tp(D)>=15 after 1H (P) 1N (P) 2m (P) 2S (P) 3m (P) P Opener is minimum: play three of {m} after 1H (P) 1N (P) 2m (P) 2S (P) 3N (P) | 1H (P) 1N (P) 2m (P) 2S (P) 5m (P) P No further bid == jacoby-2nt: Jacoby 2NT file: conventions/majors/jacoby-2nt.bid needs: base skills: bidding_conventions/jacoby_2nt_splinters, bidding_conventions/jacoby_2nt, partnership_bidding/jacoby_2nt after 1M (P) when !passed_hand, jacoby | modified 2N Jacoby 2NT: 4+ {M}, game forcing [alert] [artificial] shows M>=4, tp(M)>=13 after 1M (P) 2N (P) when jacoby, !modified 3x Singleton or void in {x} [artificial] shows x<=1 when x is not M 4x Good 5-card side suit shows x>=5, quality(x)>=good when x is not M 3M 18+, no shortness shows hcp>=18, shortest>=2 3N 15-17, no shortness shows hcp=15..17, shortest>=2 4M Minimum, no shortness shows hcp<=14, shortest>=2 == jump-raises: Weak and mixed jump raises of a major file: conventions/majors/jump-raises.bid needs: responses after 1M (P) when !bergen, !reverse, !inv 3M Weak jump raise: four {M}, about 3-6 shows M>=4, tp(M)<=7, hcp<=6, hcp>=2 when weak, M=4 | hcp<=3 3M Mixed raise: four {M}, 7-10 support points shows M>=4, tp(M)=7..10, hcp>=5 when mixed, !weak after (any auction) when asked mixed_raise(M), rho.last=P, partner.last=3{M} 4M Game opposite a mixed raise: 16+ shows tp(M)>=16 P No game opposite a mixed raise after (any auction) when asked preemptive_raise(M), rho.last=P, partner.last=3{M} 4M Game opposite a preemptive raise: 19+ shows tp(M)>=19 P No game opposite a preemptive raise == modified-jacoby-2nt: Modified Jacoby 2NT file: conventions/majors/modified-jacoby-2nt.bid card: major_openings.jacoby_2nt.modified needs: jacoby-2nt skills: bidding_conventions/modified_jacoby_2nt define mj_business(a) = a>=4, has(A,a) | has(K,a) after 1M (P) 2N (P) 4M Minimum, 5-3-3-2, nothing extra shows hcp<=12, shape 5-3-3-2, M=5 3C Minimum, 14 HCP or less: 3♦ asks [alert] [artificial] shows hcp<=14 3D 15+, a singleton or void: 3♥ asks where [alert] [artificial] shows hcp>=15, shortest<=1 3H 15+, 5-4-2-2: 3♠ asks for the four-card suit [alert] [artificial] shows hcp>=15, shape 5-4-2-2, M=5 3S 15+, six or more trumps, no singleton or void [alert] [artificial] shows hcp>=15, M>=6, shortest>=2 3N 15+, 5-3-3-2 shows hcp>=15, shape 5-3-3-2, M=5 4x 15+, a good five-card side suit shows hcp>=15, x>=5, quality(x)>=good when x is not M, M is S | x is not S after 1M (P) 2N (2x) | 1M (P) 2N (3x) when x is not M X Short in {x}: a singleton or void [alert] [artificial] shows x<=1 3N 15+, balanced, the ace or king of {x} shows hcp>=15, balanced, has(A,x) | has(K,x) 4M Dead minimum, 6-3-2-2 shows hcp<=12, shape 6-3-2-2, M=6 3y Natural or a control in {y} shows (y>=5, quality(y)>=good) | has(A,y) | has(K,y) when y is not M, y is not x 4y Natural or a control in {y} shows (y>=5, quality(y)>=good) | has(A,y) | has(K,y) when y is not M, y is not x, M is S | y is not S P Forcing pass: a flat hand [alert] [artificial] after 1M (P) 2N (2x) P (P) | 1M (P) 2N (3x) P (P) when x is not M X Penalty: {x} held shows x>=4 | (x>=3, has(A,x) | has(K,x)) 4M Game: no slam interest shows !slam_interest(M) after 1M (P) 2N (X) XX Business: 15+, balanced, to play 2NT redoubled shows hcp>=15, balanced P Step 1: a minimum, 14 or less [alert] [artificial] shows hcp<=14 step(1) Step 2: 15+, a singleton or void [alert] [artificial] shows hcp>=15, shortest<=1 step(2) Step 3: 15+, 5-4-2-2 [alert] [artificial] shows hcp>=15, shape 5-4-2-2, M=5 step(3) Step 4: 15+, six or more trumps, no singleton or void [alert] [artificial] shows hcp>=15, M>=6, shortest>=2 step(4) Step 5: 15+, 5-3-3-2 [alert] [artificial] shows hcp>=15, shape 5-3-3-2, M=5 after 1M (P) 2N (P) 3C (P) 3D (X) XX Business: good diamonds shows mj_business(D) after 1M (P) 2N (P) 3C (P) 3D (3z) | 1M (P) 2N (P) 3C (P) 3D (4z) X Penalty: good {z} shows mj_business(z) after 1M (P) 2N (P) 3C (P) 3D (*) when !rho.last=P P Step 1: a singleton or void [alert] [artificial] shows shortest<=1 step(1) Step 2: 5-4-2-2 [alert] [artificial] shows shape 5-4-2-2, M=5 step(2) Step 3: six or more trumps, no singleton or void [alert] [artificial] shows M>=6, shortest>=2 step(3) Step 4: 5-3-3-2 [alert] [artificial] shows shape 5-3-3-2, M=5 after 1M (P) 2N (P) 3D (P) 3H (X) XX Business: good hearts shows mj_business(H) when M is S after 1M (P) 2N (P) 3D (P) 3H (3z) | 1M (P) 2N (P) 3D (P) 3H (4z) X Penalty: good {z} shows mj_business(z) after 1S (P) 2N (P) 3D (P) 3H (*) when !rho.last=P P Step 1: a void [alert] [artificial] shows C=0 | D=0 | H=0 step(1) Step 2: a singleton club [alert] [artificial] shows C=1, D>=1, H>=1 step(2) Step 3: a singleton diamond [alert] [artificial] shows D=1, C>=2, H>=1 step(3) Step 4: a singleton heart [alert] [artificial] shows H=1, C>=2, D>=2 after 1H (P) 2N (P) 3D (P) 3H (*) when !rho.last=P P Step 1: a void [alert] [artificial] shows C=0 | D=0 | S=0 step(1) Step 2: a singleton club [alert] [artificial] shows C=1, D>=1, S>=1 step(2) Step 3: a singleton diamond [alert] [artificial] shows D=1, C>=2, S>=1 step(3) Step 4: a singleton spade [alert] [artificial] shows S=1, C>=2, D>=2 after 1M (P) 2N (P) 3H (P) 3S (X) XX Business: good spades shows mj_business(S) when M is H after 1M (P) 2N (P) 3H (P) 3S (3z) | 1M (P) 2N (P) 3H (P) 3S (4z) X Penalty: good {z} shows mj_business(z) after 1S (P) 2N (P) 3H (P) 3S (*) when !rho.last=P P Step 1: four clubs [alert] [artificial] shows C=4 step(1) Step 2: four diamonds [alert] [artificial] shows D=4 step(2) Step 3: four hearts [alert] [artificial] shows H=4 after 1H (P) 2N (P) 3H (P) 3S (*) when !rho.last=P P Step 1: four clubs [alert] [artificial] shows C=4 step(1) Step 2: four diamonds [alert] [artificial] shows D=4 step(2) Step 3: four spades [alert] [artificial] shows S=4 after 1M (P) 2N (P) 3D (P) 3H (P) 3S (P) 3N (4z) X Penalty: good {z} shows mj_business(z) after 1S (P) 2N (P) 3D (P) 3H (P) 3S (P) 3N (*) when !rho.last=P P Step 1: club void [alert] [artificial] shows C=0 step(1) Step 2: diamond void [alert] [artificial] shows D=0 step(2) Step 3: heart void [alert] [artificial] shows H=0 after 1H (P) 2N (P) 3D (P) 3H (P) 3S (P) 3N (*) when !rho.last=P P Step 1: club void [alert] [artificial] shows C=0 step(1) Step 2: diamond void [alert] [artificial] shows D=0 step(2) Step 3: spade void [alert] [artificial] shows S=0 after 1M (P) 2N (P) 3C (P) 3D Asks opener to describe the minimum [alert] [artificial] shows slam_interest(M) after 1M (P) 2N (P) 3D (P) 3H Asks where the singleton or void is [alert] [artificial] shows slam_interest(M) after 1M (P) 2N (P) 3H (P) 3S Asks for opener's four-card side suit [alert] [artificial] shows slam_interest(M) after 1M (P) 2N (P) 3C (P) 3D (P) 3H Minimum, a singleton or void [alert] [artificial] shows shortest<=1 3S Minimum, 5-4-2-2 [alert] [artificial] shows shape 5-4-2-2, M=5 3N Minimum, six or more trumps, no singleton or void [alert] [artificial] shows M>=6, shortest>=2 4M Minimum, 5-3-3-2 shows shape 5-3-3-2, M=5 4x Minimum, a good five-card side suit shows x>=5, quality(x)>=good when x is not M, M is S | x is not S after 1S (P) 2N (P) 3D (P) 3H (P) 3S A void: 3NT asks where [alert] [artificial] shows C=0 | D=0 | H=0 3N A singleton club [alert] [artificial] shows C=1, D>=1, H>=1 4C A singleton diamond [alert] [artificial] shows D=1, C>=2, H>=1 4D A singleton heart [alert] [artificial] shows H=1, C>=2, D>=2 after 1H (P) 2N (P) 3D (P) 3H (P) 3S A void: 3NT asks where [alert] [artificial] shows C=0 | D=0 | S=0 3N A singleton club [alert] [artificial] shows C=1, D>=1, S>=1 4C A singleton diamond [alert] [artificial] shows D=1, C>=2, S>=1 4D A singleton spade [alert] [artificial] shows S=1, C>=2, D>=2 after 1M (P) 2N (P) 3D (P) 3H (P) 3S (P) 3N Asks where the void is [alert] [artificial] shows slam_interest(M) after 1S (P) 2N (P) 3D (P) 3H (P) 3S (P) 3N (P) 4C Club void [alert] [artificial] shows C=0 4D Diamond void [alert] [artificial] shows D=0 4H Heart void [alert] [artificial] shows H=0 after 1H (P) 2N (P) 3D (P) 3H (P) 3S (P) 3N (P) 4C Club void [alert] [artificial] shows C=0 4D Diamond void [alert] [artificial] shows D=0 4H Spade void [alert] [artificial] shows S=0 after 1S (P) 2N (P) 3H (P) 3S (P) 3N Four clubs [alert] [artificial] shows C=4 4C Four diamonds [alert] [artificial] shows D=4 4D Four hearts [alert] [artificial] shows H=4 after 1H (P) 2N (P) 3H (P) 3S (P) 3N Four clubs [alert] [artificial] shows C=4 4C Four diamonds [alert] [artificial] shows D=4 4D Four spades [alert] [artificial] shows S=4 == splinters: Splinters over 1♥ / 1♠ file: conventions/majors/splinters.bid card: major_openings.splinters.play needs: responses skills: bidding_conventions/jacoby_2nt_splinters, bidding_conventions/splinters after 1H (P) when by_resp 3S Splinter: 4+ hearts, game values, at most one spade [alert] [artificial] shows H>=4, S<=1, !has(A,S), !has(K,S), !has(Q,S), !has(J,S), tp(H)>=15, hcp=12..15 | (hcp=11, S=0) when !passed_hand 3S Splinter: 4+ hearts, 10-11, at most one spade [alert] [artificial] shows H>=4, S<=1, !has(A,S), !has(K,S), !has(Q,S), !has(J,S), hcp=10..11, tp(H)>=13 when passed_hand after 1M (P) when by_resp 4x Splinter: 4+ {M}, game values, at most one {x} [alert] [artificial] shows M>=4, x<=1, !has(A,x), !has(K,x), !has(Q,x), !has(J,x), tp(M)>=15, hcp=12..15 | (hcp=11, x=0) when x is not M, M is S | x is not S, !passed_hand 4x Splinter: 4+ {M}, 10-11, at most one {x} [alert] [artificial] shows M>=4, x<=1, !has(A,x), !has(K,x), !has(Q,x), !has(J,x), hcp=10..11, tp(M)>=13 when x is not M, M is S | x is not S, passed_hand after 1m (P) 1H (P) when by_open, !(twalsh, m is C) 3S Splinter: 4 hearts, 17-21, at most one spade [alert] [artificial] shows H>=4, S<=1, !has(A,S), !has(K,S), !has(Q,S), !has(J,S), tp(H)>=19, hcp=17..21 | (hcp=16, S=0) after 1x (P) 1M (P) when by_open, !(twalsh, x is C) 4y Splinter: 4 {M}, 17-21, at most one {y} [alert] [artificial] shows M>=4, y<=1, !has(A,y), !has(K,y), !has(Q,y), !has(J,y), tp(M)>=19, hcp=17..21 | (hcp=16, y=0) when y is not M, y is not x, M is S | y is not S after 1H (P) 3S (P) | 1H (P) 3S (X) | 1H (P) 3S (X) 4H Game: no slam interest shows !((!has(K,S), !has(Q,S), !has(J,S), tp(H)>=14) | (!has(K,S), !has(Q,S), has(J,S), tp(H)>=15) | (!has(K,S), has(Q,S), !has(J,S), tp(H)>=16) | (!has(K,S), has(Q,S), has(J,S), tp(H)>=17) | (has(K,S), !has(Q,S), !has(J,S), tp(H)>=17) | (has(K,S), !has(Q,S), has(J,S), tp(H)>=18) | (has(K,S), has(Q,S), !has(J,S), tp(H)>=19) | (has(K,S), has(Q,S), has(J,S), tp(H)>=20)) cheapest(C) Slam try: control bid in ♣ [alert] [artificial] shows (!has(K,S), !has(Q,S), !has(J,S), tp(H)>=14) | (!has(K,S), !has(Q,S), has(J,S), tp(H)>=15) | (!has(K,S), has(Q,S), !has(J,S), tp(H)>=16) | (!has(K,S), has(Q,S), has(J,S), tp(H)>=17) | (has(K,S), !has(Q,S), !has(J,S), tp(H)>=17) | (has(K,S), !has(Q,S), has(J,S), tp(H)>=18) | (has(K,S), has(Q,S), !has(J,S), tp(H)>=19) | (has(K,S), has(Q,S), has(J,S), tp(H)>=20) when cue, H is not C, S is not C, under_game(C), has(A,C) | C<=0 | (style is first_or_second_round, has(K,C) | C<=1), (H is not C, S is not C, C>=2, !has(A,C), !has(K,C)) | (H is not D, S is not D, D>=2, !has(A,D), !has(K,D)) | (H is not H, S is not H, H>=2, !has(A,H), !has(K,H)) | (H is not S, S is not S, S>=2, !has(A,S), !has(K,S)) cheapest(D) Slam try: control bid in ♦ [alert] [artificial] shows (!has(K,S), !has(Q,S), !has(J,S), tp(H)>=14) | (!has(K,S), !has(Q,S), has(J,S), tp(H)>=15) | (!has(K,S), has(Q,S), !has(J,S), tp(H)>=16) | (!has(K,S), has(Q,S), has(J,S), tp(H)>=17) | (has(K,S), !has(Q,S), !has(J,S), tp(H)>=17) | (has(K,S), !has(Q,S), has(J,S), tp(H)>=18) | (has(K,S), has(Q,S), !has(J,S), tp(H)>=19) | (has(K,S), has(Q,S), has(J,S), tp(H)>=20) when cue, H is not D, S is not D, under_game(D), has(A,D) | D<=0 | (style is first_or_second_round, has(K,D) | D<=1), (H is not C, S is not C, C>=2, !has(A,C), !has(K,C)) | (H is not D, S is not D, D>=2, !has(A,D), !has(K,D)) | (H is not H, S is not H, H>=2, !has(A,H), !has(K,H)) | (H is not S, S is not S, S>=2, !has(A,S), !has(K,S)) cheapest(H) Slam try: control bid in ♥ [alert] [artificial] shows (!has(K,S), !has(Q,S), !has(J,S), tp(H)>=14) | (!has(K,S), !has(Q,S), has(J,S), tp(H)>=15) | (!has(K,S), has(Q,S), !has(J,S), tp(H)>=16) | (!has(K,S), has(Q,S), has(J,S), tp(H)>=17) | (has(K,S), !has(Q,S), !has(J,S), tp(H)>=17) | (has(K,S), !has(Q,S), has(J,S), tp(H)>=18) | (has(K,S), has(Q,S), !has(J,S), tp(H)>=19) | (has(K,S), has(Q,S), has(J,S), tp(H)>=20) when cue, H is not H, S is not H, under_game(H), has(A,H) | H<=0 | (style is first_or_second_round, has(K,H) | H<=1), (H is not C, S is not C, C>=2, !has(A,C), !has(K,C)) | (H is not D, S is not D, D>=2, !has(A,D), !has(K,D)) | (H is not H, S is not H, H>=2, !has(A,H), !has(K,H)) | (H is not S, S is not S, S>=2, !has(A,S), !has(K,S)) cheapest(S) Slam try: control bid in ♠ [alert] [artificial] shows (!has(K,S), !has(Q,S), !has(J,S), tp(H)>=14) | (!has(K,S), !has(Q,S), has(J,S), tp(H)>=15) | (!has(K,S), has(Q,S), !has(J,S), tp(H)>=16) | (!has(K,S), has(Q,S), has(J,S), tp(H)>=17) | (has(K,S), !has(Q,S), !has(J,S), tp(H)>=17) | (has(K,S), !has(Q,S), has(J,S), tp(H)>=18) | (has(K,S), has(Q,S), !has(J,S), tp(H)>=19) | (has(K,S), has(Q,S), has(J,S), tp(H)>=20) when cue, H is not S, S is not S, under_game(S), has(A,S) | S<=0 | (style is first_or_second_round, has(K,S) | S<=1), (H is not C, S is not C, C>=2, !has(A,C), !has(K,C)) | (H is not D, S is not D, D>=2, !has(A,D), !has(K,D)) | (H is not H, S is not H, H>=2, !has(A,H), !has(K,H)) | (H is not S, S is not S, S>=2, !has(A,S), !has(K,S)) 4N Keycard ask in {trump} [artificial] shows (!has(K,S), !has(Q,S), !has(J,S), tp(H)>=14) | (!has(K,S), !has(Q,S), has(J,S), tp(H)>=15) | (!has(K,S), has(Q,S), !has(J,S), tp(H)>=16) | (!has(K,S), has(Q,S), has(J,S), tp(H)>=17) | (has(K,S), !has(Q,S), !has(J,S), tp(H)>=17) | (has(K,S), !has(Q,S), has(J,S), tp(H)>=18) | (has(K,S), has(Q,S), !has(J,S), tp(H)>=19) | (has(K,S), has(Q,S), has(J,S), tp(H)>=20) when k1430 | k0314 after 1M (P) 4x (P) | 1M (P) 4x (X) when x is not M, M is S | x is not S 4M Game: no slam interest shows !((!has(K,x), !has(Q,x), !has(J,x), tp(M)>=14) | (!has(K,x), !has(Q,x), has(J,x), tp(M)>=15) | (!has(K,x), has(Q,x), !has(J,x), tp(M)>=16) | (!has(K,x), has(Q,x), has(J,x), tp(M)>=17) | (has(K,x), !has(Q,x), !has(J,x), tp(M)>=17) | (has(K,x), !has(Q,x), has(J,x), tp(M)>=18) | (has(K,x), has(Q,x), !has(J,x), tp(M)>=19) | (has(K,x), has(Q,x), has(J,x), tp(M)>=20)) cheapest(C) Slam try: control bid in ♣ [alert] [artificial] shows (!has(K,x), !has(Q,x), !has(J,x), tp(M)>=14) | (!has(K,x), !has(Q,x), has(J,x), tp(M)>=15) | (!has(K,x), has(Q,x), !has(J,x), tp(M)>=16) | (!has(K,x), has(Q,x), has(J,x), tp(M)>=17) | (has(K,x), !has(Q,x), !has(J,x), tp(M)>=17) | (has(K,x), !has(Q,x), has(J,x), tp(M)>=18) | (has(K,x), has(Q,x), !has(J,x), tp(M)>=19) | (has(K,x), has(Q,x), has(J,x), tp(M)>=20) when cue, M is not C, x is not C, under_game(C), has(A,C) | C<=0 | (style is first_or_second_round, has(K,C) | C<=1), (M is not C, x is not C, C>=2, !has(A,C), !has(K,C)) | (M is not D, x is not D, D>=2, !has(A,D), !has(K,D)) | (M is not H, x is not H, H>=2, !has(A,H), !has(K,H)) | (M is not S, x is not S, S>=2, !has(A,S), !has(K,S)) cheapest(D) Slam try: control bid in ♦ [alert] [artificial] shows (!has(K,x), !has(Q,x), !has(J,x), tp(M)>=14) | (!has(K,x), !has(Q,x), has(J,x), tp(M)>=15) | (!has(K,x), has(Q,x), !has(J,x), tp(M)>=16) | (!has(K,x), has(Q,x), has(J,x), tp(M)>=17) | (has(K,x), !has(Q,x), !has(J,x), tp(M)>=17) | (has(K,x), !has(Q,x), has(J,x), tp(M)>=18) | (has(K,x), has(Q,x), !has(J,x), tp(M)>=19) | (has(K,x), has(Q,x), has(J,x), tp(M)>=20) when cue, M is not D, x is not D, under_game(D), has(A,D) | D<=0 | (style is first_or_second_round, has(K,D) | D<=1), (M is not C, x is not C, C>=2, !has(A,C), !has(K,C)) | (M is not D, x is not D, D>=2, !has(A,D), !has(K,D)) | (M is not H, x is not H, H>=2, !has(A,H), !has(K,H)) | (M is not S, x is not S, S>=2, !has(A,S), !has(K,S)) cheapest(H) Slam try: control bid in ♥ [alert] [artificial] shows (!has(K,x), !has(Q,x), !has(J,x), tp(M)>=14) | (!has(K,x), !has(Q,x), has(J,x), tp(M)>=15) | (!has(K,x), has(Q,x), !has(J,x), tp(M)>=16) | (!has(K,x), has(Q,x), has(J,x), tp(M)>=17) | (has(K,x), !has(Q,x), !has(J,x), tp(M)>=17) | (has(K,x), !has(Q,x), has(J,x), tp(M)>=18) | (has(K,x), has(Q,x), !has(J,x), tp(M)>=19) | (has(K,x), has(Q,x), has(J,x), tp(M)>=20) when cue, M is not H, x is not H, under_game(H), has(A,H) | H<=0 | (style is first_or_second_round, has(K,H) | H<=1), (M is not C, x is not C, C>=2, !has(A,C), !has(K,C)) | (M is not D, x is not D, D>=2, !has(A,D), !has(K,D)) | (M is not H, x is not H, H>=2, !has(A,H), !has(K,H)) | (M is not S, x is not S, S>=2, !has(A,S), !has(K,S)) cheapest(S) Slam try: control bid in ♠ [alert] [artificial] shows (!has(K,x), !has(Q,x), !has(J,x), tp(M)>=14) | (!has(K,x), !has(Q,x), has(J,x), tp(M)>=15) | (!has(K,x), has(Q,x), !has(J,x), tp(M)>=16) | (!has(K,x), has(Q,x), has(J,x), tp(M)>=17) | (has(K,x), !has(Q,x), !has(J,x), tp(M)>=17) | (has(K,x), !has(Q,x), has(J,x), tp(M)>=18) | (has(K,x), has(Q,x), !has(J,x), tp(M)>=19) | (has(K,x), has(Q,x), has(J,x), tp(M)>=20) when cue, M is not S, x is not S, under_game(S), has(A,S) | S<=0 | (style is first_or_second_round, has(K,S) | S<=1), (M is not C, x is not C, C>=2, !has(A,C), !has(K,C)) | (M is not D, x is not D, D>=2, !has(A,D), !has(K,D)) | (M is not H, x is not H, H>=2, !has(A,H), !has(K,H)) | (M is not S, x is not S, S>=2, !has(A,S), !has(K,S)) 4N Keycard ask in {trump} [artificial] shows (!has(K,x), !has(Q,x), !has(J,x), tp(M)>=14) | (!has(K,x), !has(Q,x), has(J,x), tp(M)>=15) | (!has(K,x), has(Q,x), !has(J,x), tp(M)>=16) | (!has(K,x), has(Q,x), has(J,x), tp(M)>=17) | (has(K,x), !has(Q,x), !has(J,x), tp(M)>=17) | (has(K,x), !has(Q,x), has(J,x), tp(M)>=18) | (has(K,x), has(Q,x), !has(J,x), tp(M)>=19) | (has(K,x), has(Q,x), has(J,x), tp(M)>=20) when k1430 | k0314 after 1m (P) 1H (P) 3S (P) when by_open, !(twalsh, m is C) 4H Game: no slam interest shows !((!has(K,S), !has(Q,S), !has(J,S), tp(H)>=11) | (!has(K,S), !has(Q,S), has(J,S), tp(H)>=12) | (!has(K,S), has(Q,S), !has(J,S), tp(H)>=13) | (!has(K,S), has(Q,S), has(J,S), tp(H)>=14) | (has(K,S), !has(Q,S), !has(J,S), tp(H)>=14) | (has(K,S), !has(Q,S), has(J,S), tp(H)>=15) | (has(K,S), has(Q,S), !has(J,S), tp(H)>=16) | (has(K,S), has(Q,S), has(J,S), tp(H)>=17)) cheapest(C) Slam try: control bid in ♣ [alert] [artificial] shows (!has(K,S), !has(Q,S), !has(J,S), tp(H)>=11) | (!has(K,S), !has(Q,S), has(J,S), tp(H)>=12) | (!has(K,S), has(Q,S), !has(J,S), tp(H)>=13) | (!has(K,S), has(Q,S), has(J,S), tp(H)>=14) | (has(K,S), !has(Q,S), !has(J,S), tp(H)>=14) | (has(K,S), !has(Q,S), has(J,S), tp(H)>=15) | (has(K,S), has(Q,S), !has(J,S), tp(H)>=16) | (has(K,S), has(Q,S), has(J,S), tp(H)>=17) when cue, H is not C, S is not C, under_game(C), has(A,C) | C<=0 | (style is first_or_second_round, has(K,C) | C<=1), (H is not C, S is not C, C>=2, !has(A,C), !has(K,C)) | (H is not D, S is not D, D>=2, !has(A,D), !has(K,D)) | (H is not H, S is not H, H>=2, !has(A,H), !has(K,H)) | (H is not S, S is not S, S>=2, !has(A,S), !has(K,S)) cheapest(D) Slam try: control bid in ♦ [alert] [artificial] shows (!has(K,S), !has(Q,S), !has(J,S), tp(H)>=11) | (!has(K,S), !has(Q,S), has(J,S), tp(H)>=12) | (!has(K,S), has(Q,S), !has(J,S), tp(H)>=13) | (!has(K,S), has(Q,S), has(J,S), tp(H)>=14) | (has(K,S), !has(Q,S), !has(J,S), tp(H)>=14) | (has(K,S), !has(Q,S), has(J,S), tp(H)>=15) | (has(K,S), has(Q,S), !has(J,S), tp(H)>=16) | (has(K,S), has(Q,S), has(J,S), tp(H)>=17) when cue, H is not D, S is not D, under_game(D), has(A,D) | D<=0 | (style is first_or_second_round, has(K,D) | D<=1), (H is not C, S is not C, C>=2, !has(A,C), !has(K,C)) | (H is not D, S is not D, D>=2, !has(A,D), !has(K,D)) | (H is not H, S is not H, H>=2, !has(A,H), !has(K,H)) | (H is not S, S is not S, S>=2, !has(A,S), !has(K,S)) cheapest(H) Slam try: control bid in ♥ [alert] [artificial] shows (!has(K,S), !has(Q,S), !has(J,S), tp(H)>=11) | (!has(K,S), !has(Q,S), has(J,S), tp(H)>=12) | (!has(K,S), has(Q,S), !has(J,S), tp(H)>=13) | (!has(K,S), has(Q,S), has(J,S), tp(H)>=14) | (has(K,S), !has(Q,S), !has(J,S), tp(H)>=14) | (has(K,S), !has(Q,S), has(J,S), tp(H)>=15) | (has(K,S), has(Q,S), !has(J,S), tp(H)>=16) | (has(K,S), has(Q,S), has(J,S), tp(H)>=17) when cue, H is not H, S is not H, under_game(H), has(A,H) | H<=0 | (style is first_or_second_round, has(K,H) | H<=1), (H is not C, S is not C, C>=2, !has(A,C), !has(K,C)) | (H is not D, S is not D, D>=2, !has(A,D), !has(K,D)) | (H is not H, S is not H, H>=2, !has(A,H), !has(K,H)) | (H is not S, S is not S, S>=2, !has(A,S), !has(K,S)) cheapest(S) Slam try: control bid in ♠ [alert] [artificial] shows (!has(K,S), !has(Q,S), !has(J,S), tp(H)>=11) | (!has(K,S), !has(Q,S), has(J,S), tp(H)>=12) | (!has(K,S), has(Q,S), !has(J,S), tp(H)>=13) | (!has(K,S), has(Q,S), has(J,S), tp(H)>=14) | (has(K,S), !has(Q,S), !has(J,S), tp(H)>=14) | (has(K,S), !has(Q,S), has(J,S), tp(H)>=15) | (has(K,S), has(Q,S), !has(J,S), tp(H)>=16) | (has(K,S), has(Q,S), has(J,S), tp(H)>=17) when cue, H is not S, S is not S, under_game(S), has(A,S) | S<=0 | (style is first_or_second_round, has(K,S) | S<=1), (H is not C, S is not C, C>=2, !has(A,C), !has(K,C)) | (H is not D, S is not D, D>=2, !has(A,D), !has(K,D)) | (H is not H, S is not H, H>=2, !has(A,H), !has(K,H)) | (H is not S, S is not S, S>=2, !has(A,S), !has(K,S)) 4N Keycard ask in {trump} [artificial] shows (!has(K,S), !has(Q,S), !has(J,S), tp(H)>=11) | (!has(K,S), !has(Q,S), has(J,S), tp(H)>=12) | (!has(K,S), has(Q,S), !has(J,S), tp(H)>=13) | (!has(K,S), has(Q,S), has(J,S), tp(H)>=14) | (has(K,S), !has(Q,S), !has(J,S), tp(H)>=14) | (has(K,S), !has(Q,S), has(J,S), tp(H)>=15) | (has(K,S), has(Q,S), !has(J,S), tp(H)>=16) | (has(K,S), has(Q,S), has(J,S), tp(H)>=17) when k1430 | k0314 after 1x (P) 1M (P) 4y (P) when by_open, y is not M, y is not x, M is S | y is not S, !(twalsh, x is C) 4M Game: no slam interest shows !((!has(K,y), !has(Q,y), !has(J,y), tp(M)>=11) | (!has(K,y), !has(Q,y), has(J,y), tp(M)>=12) | (!has(K,y), has(Q,y), !has(J,y), tp(M)>=13) | (!has(K,y), has(Q,y), has(J,y), tp(M)>=14) | (has(K,y), !has(Q,y), !has(J,y), tp(M)>=14) | (has(K,y), !has(Q,y), has(J,y), tp(M)>=15) | (has(K,y), has(Q,y), !has(J,y), tp(M)>=16) | (has(K,y), has(Q,y), has(J,y), tp(M)>=17)) cheapest(C) Slam try: control bid in ♣ [alert] [artificial] shows (!has(K,y), !has(Q,y), !has(J,y), tp(M)>=11) | (!has(K,y), !has(Q,y), has(J,y), tp(M)>=12) | (!has(K,y), has(Q,y), !has(J,y), tp(M)>=13) | (!has(K,y), has(Q,y), has(J,y), tp(M)>=14) | (has(K,y), !has(Q,y), !has(J,y), tp(M)>=14) | (has(K,y), !has(Q,y), has(J,y), tp(M)>=15) | (has(K,y), has(Q,y), !has(J,y), tp(M)>=16) | (has(K,y), has(Q,y), has(J,y), tp(M)>=17) when cue, M is not C, y is not C, under_game(C), has(A,C) | C<=0 | (style is first_or_second_round, has(K,C) | C<=1), (M is not C, y is not C, C>=2, !has(A,C), !has(K,C)) | (M is not D, y is not D, D>=2, !has(A,D), !has(K,D)) | (M is not H, y is not H, H>=2, !has(A,H), !has(K,H)) | (M is not S, y is not S, S>=2, !has(A,S), !has(K,S)) cheapest(D) Slam try: control bid in ♦ [alert] [artificial] shows (!has(K,y), !has(Q,y), !has(J,y), tp(M)>=11) | (!has(K,y), !has(Q,y), has(J,y), tp(M)>=12) | (!has(K,y), has(Q,y), !has(J,y), tp(M)>=13) | (!has(K,y), has(Q,y), has(J,y), tp(M)>=14) | (has(K,y), !has(Q,y), !has(J,y), tp(M)>=14) | (has(K,y), !has(Q,y), has(J,y), tp(M)>=15) | (has(K,y), has(Q,y), !has(J,y), tp(M)>=16) | (has(K,y), has(Q,y), has(J,y), tp(M)>=17) when cue, M is not D, y is not D, under_game(D), has(A,D) | D<=0 | (style is first_or_second_round, has(K,D) | D<=1), (M is not C, y is not C, C>=2, !has(A,C), !has(K,C)) | (M is not D, y is not D, D>=2, !has(A,D), !has(K,D)) | (M is not H, y is not H, H>=2, !has(A,H), !has(K,H)) | (M is not S, y is not S, S>=2, !has(A,S), !has(K,S)) cheapest(H) Slam try: control bid in ♥ [alert] [artificial] shows (!has(K,y), !has(Q,y), !has(J,y), tp(M)>=11) | (!has(K,y), !has(Q,y), has(J,y), tp(M)>=12) | (!has(K,y), has(Q,y), !has(J,y), tp(M)>=13) | (!has(K,y), has(Q,y), has(J,y), tp(M)>=14) | (has(K,y), !has(Q,y), !has(J,y), tp(M)>=14) | (has(K,y), !has(Q,y), has(J,y), tp(M)>=15) | (has(K,y), has(Q,y), !has(J,y), tp(M)>=16) | (has(K,y), has(Q,y), has(J,y), tp(M)>=17) when cue, M is not H, y is not H, under_game(H), has(A,H) | H<=0 | (style is first_or_second_round, has(K,H) | H<=1), (M is not C, y is not C, C>=2, !has(A,C), !has(K,C)) | (M is not D, y is not D, D>=2, !has(A,D), !has(K,D)) | (M is not H, y is not H, H>=2, !has(A,H), !has(K,H)) | (M is not S, y is not S, S>=2, !has(A,S), !has(K,S)) cheapest(S) Slam try: control bid in ♠ [alert] [artificial] shows (!has(K,y), !has(Q,y), !has(J,y), tp(M)>=11) | (!has(K,y), !has(Q,y), has(J,y), tp(M)>=12) | (!has(K,y), has(Q,y), !has(J,y), tp(M)>=13) | (!has(K,y), has(Q,y), has(J,y), tp(M)>=14) | (has(K,y), !has(Q,y), !has(J,y), tp(M)>=14) | (has(K,y), !has(Q,y), has(J,y), tp(M)>=15) | (has(K,y), has(Q,y), !has(J,y), tp(M)>=16) | (has(K,y), has(Q,y), has(J,y), tp(M)>=17) when cue, M is not S, y is not S, under_game(S), has(A,S) | S<=0 | (style is first_or_second_round, has(K,S) | S<=1), (M is not C, y is not C, C>=2, !has(A,C), !has(K,C)) | (M is not D, y is not D, D>=2, !has(A,D), !has(K,D)) | (M is not H, y is not H, H>=2, !has(A,H), !has(K,H)) | (M is not S, y is not S, S>=2, !has(A,S), !has(K,S)) 4N Keycard ask in {trump} [artificial] shows (!has(K,y), !has(Q,y), !has(J,y), tp(M)>=11) | (!has(K,y), !has(Q,y), has(J,y), tp(M)>=12) | (!has(K,y), has(Q,y), !has(J,y), tp(M)>=13) | (!has(K,y), has(Q,y), has(J,y), tp(M)>=14) | (has(K,y), !has(Q,y), !has(J,y), tp(M)>=14) | (has(K,y), !has(Q,y), has(J,y), tp(M)>=15) | (has(K,y), has(Q,y), !has(J,y), tp(M)>=16) | (has(K,y), has(Q,y), has(J,y), tp(M)>=17) when k1430 | k0314 == choice-of-games: Choosing between 3NT and a major-suit game file: conventions/notrump/choice-of-games.bid needs: notrump-base skills: partnership_bidding/basic_notrump after (any auction) when asked choice 4H Corrects to the heart fit shows H>=8-partner.H.min when partner.H>=4 4S Corrects to the spade fit shows S>=8-partner.S.min when partner.S>=4 P Plays 3NT == jacoby-transfers: Jacoby Transfers file: conventions/notrump/jacoby-transfers.bid card: notrump.transfers.jacoby needs: notrump-base skills: bidding_conventions/jacoby_transfers, partnership_bidding/stayman_transfers after nt1 when !they.bid | systems_on 2D Transfer to hearts [announce: Transfer] [artificial] shows H>=5 2H Transfer to spades [announce: Transfer] [artificial] shows S>=5 2H Transfer to spades, 5-5 in the majors [announce: Transfer] [artificial] shows S>=5, H>=5 when style is bba after nt1 2D (P) 2H Completes transfer when system is not brill after nt1 2H (P) 2S Completes transfer when system is not brill after nt1 2D (P) when system is brill 2H Completes transfer: 2-3 ♥, or a minimum 3=4=3=3 shows H<=3 | (H=4, shortest=3, hcp<=15) after nt1 2H (P) when system is brill 2S Completes transfer: 2-3 ♠, or a minimum 4=3=3=3 shows S<=3 | (S=4, shortest=3, hcp<=15) after (any auction) when answered transfer(M) 3M Sign off in the known fit shows suit_strength=signoff when partner.M>=4, !partner.last=2{M} 4M Game: in the fit, opposite a super-accept shows suit_strength=invite when partner.M>=4 P Weak: to play, {signoff} total points shows strength=signoff when maybe partner.M<=3 | partner.last=3{M}, !passes_out_artificial 2N Invitational: {invite} total points, exactly 5 {M} shows M=5, balanced | shortest>=2, strength=invite 3M Invitational: {invite} total points, 6+ {M} shows M>=6, suit_strength=invite when partner.last=2{M} 3M Invitational: 6+ {M} shows M>=6, strength>=invite, suit_strength=signoff, hcp>=25-partner.hcp.max when partner.last=2{M} P Weak in HCP: play here shows M>=6, strength>=invite, suit_strength=signoff, hcp<=24-partner.hcp.max when partner.last=2{M} 3N Choice of games: 5 {M}, {game} total points shows M=5, balanced, strength=game when maybe partner.M<=2 4M Game: {game} total points, 6+ {M} shows M>=6, suit_strength=game when !texas 4M Game: 6+ {M}, mild slam interest shows M>=6, suit_points>=31-partner.points.max, suit_points<=32-partner.points.min when texas 4M Game: {game} total points, 6+ {M} shows M>=6, suit_strength=game when texas 4M Game: in the known fit shows suit_strength=game when partner.M>=3 5M Slam invitation: 6+ {M} shows M>=6, suit_strength=slam_invite when !texas, partner.last=2{M} 6M Slam: 6+ {M} shows M>=6, suit_strength>=slam when !texas, partner.last=2{M} 3m Second suit, game forcing shows m>=4, strength>=game 4N Quantitative, 5 {M} shows M=5, balanced, strength=slam_invite when quant_4nt 6N Slam: {slam} total points, 5 {M} shows M=5, balanced, strength=slam P Weak in HCP: play here shows M=5, strength=invite, hcp<=24-partner.hcp.max when maybe partner.M<=3 | partner.last=3{M} 2N Invitational, exactly 5 {M}, a singleton shows M=5, strength=invite, hcp>=25-partner.hcp.max after (any auction) when asked quant_major(M) 6M Accepts in {M}: four trumps, a doubleton shows M>=4, shortest=2, points>=32-partner.points.min when imps 6M Accepts in {M}: three trumps, a doubleton, not a maximum shows M=3, shortest=2, points>=32-partner.points.min, hcp<=shown.hcp.max-1 when imps 6M Accepts in {M}: a fit and a doubleton shows M>=3, shortest=2, points<=31-partner.points.min, tp(M)>=32-partner.points.min 6N Accepts the slam invitation shows points>=32-partner.points.min P Declines shows points<=31-partner.points.min after (any auction) when asked new_suit(M) 3M 3+ {M}: support shows M>=3 3N No fit: 2 {M} shows M<=2 after (any auction) when asked slam_try(M) 4N Keycard ask: good fit and a maximum [artificial] shows M>=3, points>=31-partner.suit_points.min P No slam: plays game after (any auction) when asked major_slam_invite(M) 6M Accepts the slam invitation: not a minimum shows hcp>=shown.hcp.max-1 P Declines: a minimum shows hcp<=shown.hcp.max-2 after 1N (P) 2D (P) 2H (P) 2S 5 hearts and 4 spades, invitational, not forcing shows H=5, S=4, hcp>=24-partner.hcp.max, hcp<=24-partner.hcp.min after 1N (P) 2D (P) 2H (P) 2S (P) 4H Accepts, in the heart fit shows H>=4 | (H=3, points>=24-partner.hcp.min) 3H Declines, in the heart fit shows H=3, points<=23-partner.hcp.min 4S Accepts, in the spade fit shows S>=4, H<=2, points>=23-partner.hcp.min 3S Declines, in the spade fit shows S>=4, H<=2, points<=22-partner.hcp.min P No eight-card fit: play 2S shows H<=2, S<=3 after 1N (P) 2D (P) 2H (P) 2S (P) 3H (P) 4H Game: the top of the invitation shows hcp>=25-partner.hcp.max P Minimum: play 3H shows hcp<=24-partner.hcp.max after 1N (P) 2D (P) 2H (P) 2S (P) 3S (P) 4S Game: the top of the invitation shows hcp>=25-partner.hcp.max P Minimum: play 3S shows hcp<=24-partner.hcp.max after 1N (X) when vs_double 2H Transfer to spades [announce: Transfer] [artificial] shows S>=5 when S>=H 2D Transfer to hearts [announce: Transfer] [artificial] shows H>=5 when H>S after 1N (2C) when vs_2c 2H Transfer to spades [announce: Transfer] [artificial] shows S>=5, hcp>=5 when S>=H 2D Transfer to hearts [announce: Transfer] [artificial] shows H>=5, hcp>=5 when H>S after 1N (X) 2D (P) when vs_double 2H Completes transfer after 1N (X) 2H (P) when vs_double 2S Completes transfer after 1N (2C) 2D (P) when vs_2c 2H Completes transfer after 1N (2C) 2H (P) when vs_2c 2S Completes transfer == lebensohl: Lebensohl after they overcall our 1NT file: conventions/notrump/lebensohl.bid card: notrump.lebensohl.over_interference needs: nt-interference skills: competitive_bidding/lebensohl after 1N (2y) when y is not C, rho.y>=4, maybe rho.H<=3 | maybe rho.S<=3, !rub 3y Stayman, no stopper in {y}: a four-card major [alert] [artificial] shows hcp>=10, !stop(y), H=4 | S=4, H<=4, S<=4 when y is D 3y Stayman, no stopper in {y}: four spades [alert] [artificial] shows hcp>=10, !stop(y), S=4 when y is H 3y Stayman, no stopper in {y}: four hearts [alert] [artificial] shows hcp>=10, !stop(y), H=4 when y is S 2N Lebensohl: relays to 3♣, then Stayman with a stopper in {y} [alert] [artificial] shows hcp>=10, stop(y), H=4 | S=4, H<=4, S<=4 when y is D 2N Lebensohl: relays to 3♣, then Stayman with a stopper in {y} [alert] [artificial] shows hcp>=10, stop(y), S=4 when y is H 2N Lebensohl: relays to 3♣, then Stayman with a stopper in {y} [alert] [artificial] shows hcp>=10, stop(y), H=4, S<=4 when y is S 3N Game: 10+ HCP, no stopper in {y} shows hcp>=10, !stop(y) 2N Lebensohl: relays to 3♣, then 3NT with a stopper in {y} [alert] [artificial] shows hcp>=10, stop(y) 2N Lebensohl: relays to 3♣, to play three of a long minor [alert] [artificial] shows hcp>=4, points<=9, C>=6 | D>=6, H<=4, S<=4 when y is not D 2N Lebensohl: relays to 3♣, to play three clubs [alert] [artificial] shows hcp>=4, points<=9, C>=6, H<=4, S<=4 when y is D 2N Lebensohl: relays to 3♣, to play three hearts [alert] [artificial] shows hcp>=4, points<=9, H>=5, H>=S when y is S 2N Lebensohl: relays to 3♣, then invites in spades [alert] [artificial] shows S>=5, S>=H, hcp=8..9 when y is D | y is H 2N Lebensohl: relays to 3♣, then invites in hearts [alert] [artificial] shows H>=5, H>S, hcp=8..9 when y is D 3S Natural, forcing to game: five or more spades shows S>=5, S>=H, points>=10 when y is D | y is H 3H Natural, forcing to game: five or more hearts shows H>=5, H>S, points>=10 when y is D after 1N (2y) 2N (P) when y is not C, lho.y>=4, maybe lho.H<=3 | maybe lho.S<=3, !rub 3C Completes the Lebensohl relay [alert] [artificial] after 1N (2y) 2N (P) 3C (P) when y is not C, rho.y>=4, maybe rho.H<=3 | maybe rho.S<=3, !rub P To play: clubs shows C>=6, points<=9 3D To play: diamonds shows D>=6, points<=9 when y is not D 3H To play: hearts shows H>=5, points<=9 when y is S 3H Invitational: five or more hearts shows H>=5, hcp=8..9 when y is D 3S Invitational: five or more spades shows S>=5, hcp=8..9 when y is D | y is H 3y Stayman, a stopper in {y}: a four-card major [alert] [artificial] shows hcp>=10, stop(y), H=4 | S=4, H<=4, S<=4 when y is D 3y Stayman, a stopper in {y}: four spades [alert] [artificial] shows hcp>=10, stop(y), S=4 when y is H 3y Stayman, a stopper in {y}: four hearts [alert] [artificial] shows hcp>=10, stop(y), H=4 when y is S 3N Game with a stopper in {y} shows hcp>=10, stop(y) after (any auction) when asked leb_invite(M) 4M Accepts: a maximum and three or more {M} shows M>=3, hcp>=16 3N Accepts: a maximum, two {M} shows M<=2, hcp>=16 P Declines: a minimum shows hcp<=15 after 1N (2y) 3y (P) | 1N (2y) 2N (P) 3C (P) 3y (P) when y is not C, lho.y>=4, maybe lho.H<=3 | maybe lho.S<=3, !rub 3H Four hearts shows H>=4 when y is D 3S Four spades shows S>=4, H<=3 | y is H when y is D | y is H 4H Four hearts shows H>=4 when y is S after 1N (2y) 2N (P) 3C (P) 3y (P) when y is not C, lho.y>=4, maybe lho.H<=3 | maybe lho.S<=3, !rub 3N No four-card major: game in notrump after 1N (2y) 3y (P) when y is not C, lho.y>=4, maybe lho.H<=3 | maybe lho.S<=3, !rub 3N No four-card major, a stopper in {y} shows stop(y) 4C No four-card major, no stopper in {y}: clubs shows C>=D, !stop(y) 4D No four-card major, no stopper in {y}: diamonds shows D>C, !stop(y) when y is not D after 1N (2y) 3y (P) 4m (P) when y is not C, rho.y>=4, maybe rho.H<=3 | maybe rho.S<=3, !rub 5m Game in {m} == minor-suit-stayman: Minor Suit Stayman over 1NT file: conventions/notrump/minor-suit-stayman.bid card: notrump.minor_suit_stayman.play needs: notrump-base skills: bidding_conventions/minor_suit_stayman after nt1_undoubled when !they.bid | systems_on 2S Minor Suit Stayman: 5-4+ in the minors, game values [alert] [artificial] shows C>=4, D>=4, C+D>=9, H<=3, S<=3, strength>=game after nt1_undoubled 2S (P) 4C Four or more clubs, a maximum [alert] [artificial] shows C>=4, hcp>=shown.hcp.max 4D Four or more diamonds, not four clubs, a maximum [alert] [artificial] shows D>=4, C<=3, hcp>=shown.hcp.max 3N No four-card minor, a maximum shows C<=3, D<=3, hcp>=shown.hcp.max 3C Four or more clubs [alert] [artificial] shows C>=4 3D Four or more diamonds, not four clubs [alert] [artificial] shows D>=4, C<=3 2N No four-card minor [alert] [artificial] shows C<=3, D<=3 after nt1_undoubled 2S (P) 3m (P) | nt1_undoubled 2S (P) 4m (P) 4N Keycard ask in {m} [alert] [artificial] shows tp(m)>=33-partner.hcp.min when k1430 | k0314 6m Slam in the minor fit shows tp(m)>=33-partner.hcp.min 3H Short hearts: asks for a heart stopper [alert] [artificial] shows H<=1 3S Short spades: asks for a spade stopper [alert] [artificial] shows S<=1, H>=2 3N Game in notrump after nt1_undoubled 2S (P) 3m (P) 3M (P) 3N A stopper in {M}: game in notrump shows stop(M) 4m No stopper in {M} shows !stop(M) after nt1_undoubled 2S (P) 3m (P) 3M (P) 4m (P) 5m Game in the minor fit after nt1_undoubled 2S (P) 3m (P) 3M (P) 3N (P) P Game in notrump after nt1_undoubled 2S (P) 4m (P) 5m Game in the minor fit after nt1_undoubled 2S (P) 2N (P) | nt1_undoubled 2S (P) 3N (P) 6N No fit: slam values shows hcp>=33-partner.hcp.min 4N No fit: quantitative, invites 6NT shows hcp>=31-partner.hcp.min, hcp<=32-partner.hcp.min 3N No fit: game after nt1_undoubled 2S (P) 3N (P) P No fit: 3NT == minor-transfers: Minor-suit responses to 1NT file: conventions/notrump/minor-transfers.bid needs: notrump-base skills: bidding_conventions/minor_suit_transfers after nt1 when !they.bid | systems_on, style is relay 2S Relay to 3♣: a weak hand with a long minor [alert] [artificial] shows C>=6 | D>=6, H<=4, S<=4, strength=signoff after nt1 2S (P) when style is relay 3C Completes the relay [artificial] after (any auction) when answered relay P Clubs: play here shows C>=6 3D Diamonds: play here shows D>=6 after nt1 when !they.bid | systems_on, style is four_way | style is four_way_reversed 2S Transfer to clubs [alert] [artificial] shows C>=6, H<=4, S<=4, strength<=invite 2N Transfer to diamonds [alert] [artificial] shows D>=6, H<=4, S<=4, strength<=invite after nt1 2S (P) when style is four_way 2N Good club support: Kxx or better [alert] [artificial] shows C>=3, has(A,C) | has(K,C) 3C No good club support after nt1 2N (P) when style is four_way 3C Good diamond support: Kxx or better [alert] [artificial] shows D>=3, has(A,D) | has(K,D) 3D No good diamond support after nt1 2S (P) when style is four_way_reversed 3C Good club support: Kxx or better shows C>=3, has(A,C) | has(K,C) 2N No good club support [alert] [artificial] after nt1 2N (P) when style is four_way_reversed 3D Good diamond support: Kxx or better shows D>=3, has(A,D) | has(K,D) 3C No good diamond support [alert] [artificial] after nt1 when !they.bid | systems_on, style is bba 2S Transfer to clubs [alert] [artificial] shows C>=6, H<=4, S<=4, strength<=invite 3C Transfer to diamonds [alert] [artificial] shows D>=6, H<=4, S<=4, strength<=invite after nt1 2S (P) when style is bba 3C Completes the transfer after nt1 3C (P) when style is bba 3D Completes the transfer after nt1_undoubled when !they.bid | systems_on, style is two_nt_three_c 2N Transfer to clubs: six or more clubs [alert] [artificial] shows C>=6, D<=3, H<=3, S<=3 3C Transfer to diamonds: six or more diamonds [alert] [artificial] shows D>=6, C<=3, H<=3, S<=3 after nt1_undoubled 2N (P) when style is two_nt_three_c 3C Completes the transfer after nt1_undoubled 3C (P) when style is two_nt_three_c 3D Completes the transfer after (any auction) when answered transfer(m) P Play here shows strength<=invite when partner.last=3{m} 3m Sign off in {m} shows strength<=invite 3N To play: {game} total points shows strength>=game 3N To play: invitational values, a long {m} shows strength=invite when partner.m>=3 after 1N (2C) when vs_2c, style is relay 2S Relay to 3♣: a weak hand with a long minor [alert] [artificial] shows C>=6 | D>=6, H<=4, S<=4, hcp>=5, strength=signoff after 1N (2C) 2S (P) when vs_2c, style is relay 3C Completes the relay [artificial] after 1N (2C) when vs_2c, style is four_way | style is four_way_reversed 2S Transfer to clubs [alert] [artificial] shows C>=6, H<=4, S<=4, hcp>=5, strength<=invite 2N Transfer to diamonds [alert] [artificial] shows D>=6, H<=4, S<=4, hcp>=5, strength<=invite after 1N (2C) when vs_2c, style is bba 2S Transfer to clubs [alert] [artificial] shows C>=6, H<=4, S<=4, hcp>=5, strength<=invite 3C Transfer to diamonds [alert] [artificial] shows D>=6, H<=4, S<=4, hcp>=5, strength<=invite after 1N (2C) 2S (P) when vs_2c, style is bba 3C Completes the transfer after 1N (2C) 3C (P) when vs_2c, style is bba 3D Completes the transfer == nt-interference: Our 1NT when RHO acts file: conventions/notrump/nt-interference.bid needs: notrump-base after 1N (X) when vs_double XX Values: 6+ HCP, no suit to show shows hcp>=6 P Not enough to act over the double shows hcp<=5 after 1N (X) when !vs_double 2H Weak: five or more hearts, running from the double shows H>=5, H>=S, hcp<=4 2S Weak: five or more spades, running from the double shows S>=5, hcp<=4 2C Weak: six or more clubs, running from the double shows C>=6, H<=4, S<=4, hcp<=4 2D Weak: six or more diamonds, running from the double shows D>=6, H<=4, S<=4, hcp<=4 P Sitting for the double after 1N (X) 2y (P) when !vs_double, y is not N P Partner's escape: to play after 1N (X) XX (P) P Playing 1NT redoubled after 1N (X) XX (*) when !rho.last=P P Partner redoubled: his decision after 1N (X) XX (2y) P (P) X Penalty shows y>=4 | hcp>=9 P No further bid after 1N (2y) when y is not C, rho.y>=4, maybe rho.H<=3 | maybe rho.S<=3 X Negative double: four cards in an unbid major, 5+ HCP [alert] [artificial] shows hcp>=5, S>=4 | H>=4 when y is D, S<=4, H<=4 X Negative double: four hearts, 5+ HCP [alert] [artificial] shows hcp>=5, H=4 | (H=5, points<=9) when y is S X Negative double: four spades, 5+ HCP [alert] [artificial] shows hcp>=5, S=4 when y is H 2H Natural, to play: five or more hearts shows H>=5, hcp>=4, points<=9 when y is D 2S Natural, to play: five or more spades shows S>=5, hcp>=4, points<=9 when y is D | y is H cheapest(C) Natural, forcing to game: five or more clubs shows C>=5, points>=10 cheapest(D) Natural, forcing to game: five or more diamonds shows D>=5, points>=10 when y is not D 3H Natural, forcing to game: five or more hearts shows H>=5, points>=10 when y is S 4H Game: six or more hearts shows H>=6, hcp>=10 when y is not H, !texas 4S Game: six or more spades shows S>=6, hcp>=10 when y is not S, !texas 2N Invitational: 8-9 HCP, a stopper in {y} shows hcp=8..9, stop(y) when !leb, !rub 3N Game: 10+ HCP shows hcp>=10 when !leb P No bid over their overcall after 1N (2y) X (P) when y is not C, lho.y>=4, maybe lho.H<=3 | maybe lho.S<=3 cheapest(H) Four hearts for partner's double shows H>=4 when y is not H cheapest(S) Four spades for partner's double shows S>=4 when y is not S 2N No four-card major, a stopper in {y} shows stop(y) P Four of their suit: defends shows y>=4 cheapest(C) No major, no stopper: four clubs shows C>=4 cheapest(D) No major, no stopper: four diamonds shows D>=4 when y is not D cheapest(N) No four-card major after 1N (2y) X (P) 2M (P) | 1N (2y) X (P) 3M (P) when y is not C, rho.y>=4, maybe rho.H<=3 | maybe rho.S<=3 4M Game in the fit: 10+ shows M>=4, points>=10 3M Invitational in the fit: 8-9 shows M>=4, points=8..9 when partner.last=2M 3N Game, no fit: 10+ shows M<=3, points>=10 P No game shows points<=9 after 1N (2y) X (P) 2M (P) 3M (P) when y is not C, lho.y>=4, maybe lho.H<=3 | maybe lho.S<=3 4M Accepts the invitation: a maximum shows hcp>=16 P Declines: a minimum shows hcp<=15 after 1N (2y) X (P) 2N (P) | 1N (2y) X (P) 3C (P) | 1N (2y) X (P) 3D (P) when y is not C, rho.y>=4, maybe rho.H<=3 | maybe rho.S<=3 3N Game: 10+ shows points>=10 P No game shows points<=9 after 1N (2y) 3z (P) when y is not C, z is not y, z is not N, lho.y>=4, maybe lho.H<=3 | maybe lho.S<=3 4{z} Three-card support: game in the major shows z>=3 when z is H | z is S 3N Game in notrump after 1N (2y) 2z (P) when y is not C, z is not N, lho.y>=4, maybe lho.H<=3 | maybe lho.S<=3 P Partner's suit, to play after 1N (2y) 2N (P) when !leb, !rub, y is not C, lho.y>=4, maybe lho.H<=3 | maybe lho.S<=3 3N Accepts: a maximum shows hcp>=16 P Declines: a minimum shows hcp<=15 after 1N (2C) when !vs_2c, rho.C>=5 2S Natural, to play: five or more spades shows S>=5, S>=H, hcp>=4, points<=9 2H Natural, to play: five or more hearts shows H>=5, H>S, hcp>=4, points<=9 2D Natural, to play: five or more diamonds shows D>=5, H<=4, S<=4, hcp>=4, points<=9 2N Invitational: 8-9 HCP, a club stopper shows hcp=8..9, stop(C), H<=4, S<=4 3N Game: 10+ HCP, a club stopper shows hcp>=10, stop(C), H<=3, S<=3 3C Stayman cue-bid: a four-card major or no club stopper [alert] [artificial] shows hcp>=10, H<=4, S<=4, H=4 | S=4 | !stop(C) 3D Natural, forcing to game: five or more diamonds shows D>=5, points>=10 3H Natural, forcing to game: five or more hearts shows H>=5, H>S, points>=10 3S Natural, forcing to game: five or more spades shows S>=5, S>=H, points>=10 4H Game: six or more hearts shows H>=6, H>S, points>=9 when !texas 4S Game: six or more spades shows S>=6, S>=H, points>=9 when !texas P No bid over their 2♣: weak, or length in clubs after 1N (2C) 2z (P) when !vs_2c, lho.C>=5, z is not N P Partner's suit, to play after 1N (2C) 2N (P) when !vs_2c, lho.C>=5 3N Accepts: a maximum shows hcp>=16 P Declines: a minimum shows hcp<=15 after 1N (2C) 3z (P) when !vs_2c, lho.C>=5, z is not C 4{z} Three-card support: game in the major shows z>=3 when z is H | z is S 3N Game in notrump after 1N (2C) 3C (P) when !vs_2c, lho.C>=5 3H Four hearts shows H>=4 3S Four spades, not four hearts shows S>=4, H<=3 3N No four-card major, a club stopper shows H<=3, S<=3, stop(C) 3D No four-card major, no club stopper shows H<=3, S<=3 after 1N (2C) 3C (P) 3M (P) when !vs_2c, rho.C>=5 4M Game in the fit shows M>=4 3S Four spades, not four hearts shows S>=4 when M is H 3N No fit: game in notrump after 1N (2C) 3C (P) 3H (P) 3S (P) when !vs_2c, lho.C>=5 4S Four spades too: game in the fit shows S>=4 3N Game in notrump after 1N (2C) 3C (P) 3D (P) when !vs_2c, rho.C>=5 3N Game in notrump after 1N (2C) 3C (P) 3N (P) | 1N (2C) 3C (P) 3H (P) 3N (P) | 1N (2C) 3C (P) 3S (P) 3N (P) when !vs_2c P No further bid after 1N (2C) 2M (3C) when !vs_2c, lho.C>=5 3M Four-card support: competing shows M>=4 P No further bid after 1N (2C) 2N (3C) when !vs_2c, lho.C>=5 3N Accepts: a maximum shows hcp>=16 P Declines: a minimum after 1N (2C) 2z (3C) | 1N (2C) 2z (4C) when !vs_2c, lho.C>=5 P No further bid after 1N (2C) 2M (3C) 3M (4C) when !vs_2c, rho.C>=5 P No further bid after 1N (2C) P (P) when !vs_2c, lho.C>=5 X Reopening double: two clubs or fewer shows C<=2 after 1N (2C) P (P) X (P) when !vs_2c, rho.C>=5 P Four or more clubs: defends shows C>=4 2N 8-9 HCP, a club stopper shows hcp>=8, stop(C), H<=3, S<=3 2H Four or more hearts shows H>=4, H>=S 2S Four or more spades shows S>=4, S>H 2D Four or more diamonds shows D>=4 2D Nothing better after 1N (2C) P (P) X (P) 2z (P) when !vs_2c, lho.C>=5, z is not N P Partner's suit, to play after 1N (2C) P (P) X (P) 2N (P) when !vs_2c, lho.C>=5 3N Accepts: a maximum shows hcp>=16 P Declines: a minimum shows hcp<=15 after 1N (2y) when y is not C, rho.H>=4, rho.S>=4 X Values: 8+ HCP shows hcp>=8 3C Natural, forcing to game: five or more clubs shows C>=5, points>=10 3D Natural, forcing to game: five or more diamonds shows D>=5, points>=10 3N Game: 10+, both majors held shows hcp>=10, stop(H), stop(S) P No bid over their overcall after 1N (2y) when y is not C, maybe rho.y<=3, maybe rho.H<=3 | maybe rho.S<=3 X Values: 8+ HCP shows hcp>=8 3N Game: 10+ HCP shows hcp>=10 P No bid over their overcall after (any auction) when answered transfer(M), they.bid P No further bid when !passes_out_artificial after 1N (2C) X (2D) when vs_2c 2H 4+ hearts shows H>=4 2S 4 spades, not 4 hearts shows S>=4, H<=3 X Penalty: four or more diamonds, no major shows D>=4, H<=3, S<=3 P No 4-card major shows H<=3, S<=3 after 1N (2y) 3z (P) when y is not C, lho.H>=4, lho.S>=4, z is C | z is D 3N Game in notrump after 1N (2y) X (P) when y is not C, (lho.H>=4, lho.S>=4) | (maybe lho.y<=3, maybe lho.H<=3 | maybe lho.S<=3) P Defending their artificial overcall after 1N (2y) X (*) when !rho.last=P, !rho.last=X P No further bid after 1N (2y) X (2z) when y is not C, (lho.H>=4, lho.S>=4) | (maybe lho.y<=3, maybe lho.H<=3 | maybe lho.S<=3) X Penalty: four or more {z} shows z>=4 P No further bid after 1N (2y) X (2z) X (P) when y is not C, (rho.H>=4, rho.S>=4) | (maybe rho.y<=3, maybe rho.H<=3 | maybe rho.S<=3) P Partner doubled for penalties: defend after 1N (2y) X (2z) P (P) when y is not C, (rho.H>=4, rho.S>=4) | (maybe rho.y<=3, maybe rho.H<=3 | maybe rho.S<=3) X Penalty: four or more {z} shows z>=4 3N Game: 10+, {z} held shows hcp>=10, stop(z) P No further bid after 1N (2N) X Values: 8+ HCP shows hcp>=8 3H Natural, forcing to game: five or more hearts shows H>=5, points>=10 3S Natural, forcing to game: five or more spades shows S>=5, points>=10 4H Game: six or more hearts shows H>=6, hcp>=10 when !texas 4S Game: six or more spades shows S>=6, hcp>=10 when !texas 3N Game: 10+ HCP shows hcp>=10 P No bid over their 2NT after 1N (2N) 3z (P) when z is H | z is S 4{z} Three-card support: game in the major shows z>=3 3N Game in notrump after 1N (2y) P (P) P No further bid after 1N (3y) when y is not N 3N Game: 9+, a stopper in {y} shows hcp>=9, stop(y) 4H Game: five or more hearts, 9+ shows H>=5, hcp>=9 when y is not H, !texas | y is S 4S Game: five or more spades, 9+ shows S>=5, hcp>=9 when y is not S X Takeout: 9+, no stopper in {y} shows hcp>=9, y<=2 P No bid over their preempt after 1N (3y) X (P) when y is not N P Four of their suit: defends shows y>=4 3N A stopper in {y} shows stop(y) cheapest(S) Four or more spades shows S>=4 when y is not S cheapest(H) Four or more hearts shows H>=4 when y is not H cheapest(D) Four or more diamonds shows D>=4 when y is not D cheapest(C) Four or more clubs shows C>=4 when y is not C 3N Game in notrump after 1N (3y) P (P) when y is not N P No further bid == nt-splinter: Splinters over 1NT file: conventions/notrump/nt-splinter.bid needs: notrump-base after 1N (P) 3D Splinter: 0-1 ♦, 4+ in each other suit, game values [alert] [artificial] shows D<=1, !has(A,D), !has(K,D), !has(Q,D), H=4, S=4, C>=4, strength>=game when three_d is splinter 3H Splinter: 0-1 ♥, 4+ in each other suit, game values [alert] [artificial] shows H<=1, !has(A,H), !has(K,H), !has(Q,H), S=4, D>=4, C>=4, strength>=game when major_splinter 3S Splinter: 0-1 ♠, 4+ in each other suit, game values [alert] [artificial] shows S<=1, !has(A,S), !has(K,S), !has(Q,S), H=4, D>=4, C>=4, strength>=game when major_splinter after (any auction) when asked nt_splinter 4S Four spades: game in the fit shows S>=4 when partner.last=3D | partner.last=3H 4H Four hearts: game in the fit shows H>=4, S<=3 | partner.last=3S when partner.last=3D | partner.last=3S 3N No major fit: 3NT == notrump-base: 1NT opening and natural responses file: conventions/notrump/one-nt.bid needs: base skills: basic_bidding/notrump_openings, partnership_bidding/basic_notrump define auction nt1_undoubled = systems 1N (P) define auction nt1 = nt1_undoubled | [systems 1N (X) when lho.opened | rho.opened] systems on when call=1N | call=2N, maybe shown.balanced, shown.second_longest.min<=4, !me.named(C), !me.named(D), !me.named(H), !me.named(S), !me.named(N), !partner.opened, !partner.named(N), !(lho.opened | rho.opened) | systems_on, (me.opened, style is not bba) | (!partner.named(C), !partner.named(D), !partner.named(H), !partner.named(S)) after (any auction) when opening 1N Notrump opening: {nt_min}-{nt_max} HCP, balanced [announce: {nt_min} to {nt_max}] shows hcp=nt_min..nt_max, balanced, five_major is not never | (H<=4, S<=4) 1N Notrump opening: {nt_min}-{nt_max} HCP, balanced [announce: {nt_min} to {nt_max}] shows hcp=nt_min-1, points>=nt_min, balanced, five_major is not never | (H<=4, S<=4) when one_less 1N Notrump opening: {nt_min}-{nt_max} HCP, 5-4-2-2 [announce: {nt_min} to {nt_max}] shows hcp=nt_min..nt_max, shape 5-4-2-2, C=5 | D=5, S=2, H>=2, D>=2, C>=2, has(A,S) | has(K,S), H>=3 | has(A,H) | has(K,H), D>=3 | has(A,D) | has(K,D), C>=3 | has(A,C) | has(K,C) when allow_5422 1N Notrump opening: {nt_min}-{nt_max} HCP, 4-4-4-1 [announce: {nt_min} to {nt_max}] shows hcp=nt_min..nt_max, shape 4-4-4-1, S>=2 | has(A,S) | has(K,S), H>=2 | has(A,H) | has(K,H), D>=2 | has(A,D) | has(K,D), C>=2 | has(A,C) | has(K,C) when allow_4441 after nt1 when !they.bid | systems_on 6N To play: slam values shows balanced, points>=32-partner.hcp.min, H<=4, S<=4 4N Quantitative: invites 6NT shows balanced, strength=slam_invite, points<=31-partner.hcp.min, H<=4, S<=4 when quant_4nt, style is not bba 3N To play: {game} total points shows strength=game, H<=4, S<=4 when style is not bba 2N Invitational: {invite} total points shows strength=invite, H<=4, S<=4, C<=5, D<=5 when minors is not four_way, minors is not four_way_reversed, style is not bba, minors is not two_nt_three_c 2N Invitational: {invite} total points, a long minor shows strength=invite, H<=4, S<=4, C>=6 | D>=6 when minors is relay | minors is none 3C Slam try: six or more clubs, or five and unbalanced shows C>=6 | (C>=5, !balanced), strength>=slam_invite, H<=4, S<=4 when !three_c_transfer, minors is not bba, !puppet_1nt 3D Slam try: six or more diamonds, or five and unbalanced shows D>=6 | (D>=5, !balanced), strength>=slam_invite, H<=4, S<=4 when three_d is natural 3N No better call: {game} total points or more shows strength>=game P No game interest: {signoff} total points shows strength=signoff when style is not bba 4N Quantitative: invites 6NT shows balanced, strength=slam_invite, hcp>=33-partner.hcp.max, points<=31-partner.hcp.min, H<=4, S<=4 when quant_4nt, style is bba 3N To play: {game} total points shows H<=4, S<=4, bba_nt_game_points>=10, strength<=game when matchpoints, style is bba, partner.hcp.min>=15, partner.hcp.max<=17 3N To play: game values shows H<=4, S<=4, bba_nt_imp_game_points>=10, strength<=game when imps, style is bba, partner.hcp.min>=15, partner.hcp.max<=17 3N To play: {game} total points shows H<=4, S<=4, (strength=game, C<=3 | D<=3 | C>=5 | D>=5) | (C=4, D=4, hcp>=25-partner.hcp.min, hcp<=32-partner.hcp.max) when matchpoints, style is bba, partner.hcp.min<=14 | partner.hcp.max>=18 3N To play: game values shows H<=4, S<=4, (points>=24-partner.hcp.min, points<=32-partner.hcp.max, C<=3 | D<=3 | C>=5 | D>=5) | (C=4, D=4, hcp>=24-partner.hcp.min, hcp<=32-partner.hcp.max) when imps, style is bba, partner.hcp.min<=14 | partner.hcp.max>=18 2N Invitational: {invite} total points shows H<=4, S<=4, C<=5, D<=5, (strength=invite, C<=3 | D<=3 | C>=5 | D>=5, !shape 4333 | hcp<=24-partner.hcp.max | hcp>=26-partner.hcp.max | has(T,S) | has(T,H) | has(T,D) | has(T,C)) | (C=4, D=4, hcp>=25-partner.hcp.max, hcp<=24-partner.hcp.min) when minors is not four_way, minors is not four_way_reversed, matchpoints, style is bba, partner.hcp.min<=14 | partner.hcp.max>=18 2N Invitational shows H<=4, S<=4, C<=5, D<=5, (points>=25-partner.hcp.max, points<=23-partner.hcp.min, C<=3 | D<=3 | C>=5 | D>=5, !shape 4333 | hcp<=24-partner.hcp.max | hcp>=26-partner.hcp.max | has(T,S) | has(T,H) | has(T,D) | has(T,C)) | (C=4, D=4, hcp>=25-partner.hcp.max, hcp<=23-partner.hcp.min) when minors is not four_way, minors is not four_way_reversed, imps, style is bba, partner.hcp.min<=14 | partner.hcp.max>=18 P No game interest shows (strength=signoff, C<=3 | D<=3 | C>=5 | D>=5) | (C=4, D=4, hcp<=24-partner.hcp.max) | (shape 4333, hcp>=25-partner.hcp.max, hcp<=25-partner.hcp.max, !has(T,S), !has(T,H), !has(T,D), !has(T,C)) when style is bba, partner.hcp.min<=14 | partner.hcp.max>=18 2N Invitational: {invite} total points shows H<=4, S<=4, C<=5, D<=5, bba_nt_points>=8, bba_nt_game_points<=9, points>=25-partner.hcp.max when minors is not four_way, minors is not four_way_reversed, matchpoints, style is bba, partner.hcp.min>=15, partner.hcp.max<=17 2N Invitational shows H<=4, S<=4, C<=5, D<=5, bba_nt_imp_points>=8, bba_nt_imp_game_points<=9, points>=24-partner.hcp.max when minors is not four_way, minors is not four_way_reversed, imps, style is bba, partner.hcp.min>=15, partner.hcp.max<=17 P No game interest shows bba_nt_points<=7 when matchpoints, style is bba, partner.hcp.min>=15, partner.hcp.max<=17 P No game interest shows bba_nt_imp_points<=7 when imps, style is bba, partner.hcp.min>=15, partner.hcp.max<=17 3S Five or more spades, game forcing shows S>=5, S>=H, strength>=game when !jacoby 3H Five or more hearts, game forcing shows H>=5, H>S, strength>=game when !jacoby 4S To play: seven or more spades, short of a game force shows S>=7, S>=H, strength=invite when !jacoby 4H To play: seven or more hearts, short of a game force shows H>=7, H>S, strength=invite when !jacoby 2S To play: five or more spades, no game interest shows S>=5, S>=H, strength=signoff | (strength=invite, hcp<=6) when !jacoby 2H To play: five or more hearts, no game interest shows H>=5, H>S, strength=signoff | (strength=invite, hcp<=6) when !jacoby after nt1 2H (P) | nt1 2S (P) when !jacoby P Partner's signoff after (any auction) when asked choose_game(M) 4M Three or more {M}: game in the fit shows M>=3 3N Two {M}: 3NT shows M<=2 after (any auction) when answered choose_game(M), partner.last=3N 6M Slam: six or more {M}, slam values shows M>=6, strength>=slam 6N Slam values, no fit shows M<=5, strength>=slam 4N Quantitative, no fit shows M<=5, balanced, strength=slam_invite when quant_4nt 4M Six or more {M}: game in the fit shows M>=6, strength<=slam_invite P No fit: play 3NT shows M<=5, strength<=slam_invite after (any auction) when answered choose_game(M), partner.last=4{M} 6M Slam in the fit shows strength>=slam 6M Slam in the fit shows tp(M)>=33-partner.points.min P Game in the fit shows strength<=slam_invite after 1N (P) 3C (P) when !three_c_transfer, minors is not bba, !puppet_1nt 6C Accepts: a club fit and a maximum shows C>=3, hcp>=17 4C A club fit, not a maximum: responder decides shows C>=3, hcp<=16 3N Declines: no club fit shows C<=2 after 1N (P) 3D (P) when three_d is natural 6D Accepts: a diamond fit and a maximum shows D>=3, hcp>=17 4D A diamond fit, not a maximum: responder decides shows D>=3, hcp<=16 3N Declines: no diamond fit shows D<=2 after 1N (P) 3C (P) 4C (P) | 1N (P) 3D (P) 4D (P) 6{trump} Slam in the fit: 17+ shows points>=17 5{trump} Game in the fit shows points<=16 after 1N (P) 3C (P) 3N (P) | 1N (P) 3D (P) 3N (P) 6N No fit, but slam values: {slam} total points shows strength>=slam P No fit: 3NT after (any auction) when asked nt_invite 4H Accepts, in the 4-4 heart fit shows H>=4, strength>=game when partner.H>=4 4S Accepts, in the 4-4 spade fit shows S>=4, strength>=game when partner.S>=4 3H Declines, in the 4-4 heart fit shows H>=4, strength<=invite when partner.H>=4 3S Declines, in the 4-4 spade fit shows S>=4, strength<=invite when partner.S>=4 3N Accepts the invitation shows strength>=game P Declines: not a maximum shows strength<=invite after (any auction) when answered nt_invite, partner.last=3H | partner.last=3S, style is not bba P Partner declined: play three of the major after (any auction) when asked quant 6N Accepts the slam invitation shows points>=32-partner.points.min when style is not bba | shown.hcp.min>=nt_max+1 P Declines: not enough for slam shows points<=31-partner.points.min when style is not bba | shown.hcp.min>=nt_max+1 6N Accepts the slam invitation shows hcp>=33-partner.hcp.min when style is bba, shown.hcp.max<=nt_max P Declines: not enough for slam shows hcp<=32-partner.hcp.min when style is bba, shown.hcp.max<=nt_max after 1N (2C) when vs_2c 6N To play: {slam} total points shows balanced, strength=slam, H<=4, S<=4 4N Quantitative: {slam_invite} total points, invites 6NT shows balanced, strength=slam_invite when quant_4nt 3N To play: {game} total points shows strength=game, H<=4, S<=4 2N Invitational: {invite} total points shows strength=invite, H<=4, S<=4, C<=5, D<=5 when minors is not four_way, minors is not four_way_reversed 3N No better call: {game} total points or more shows strength>=game P No bid over their 2♣ == puppet-1nt: Puppet Stayman over 1NT file: conventions/notrump/puppet-1nt.bid card: notrump.stayman.puppet_1nt needs: two-nt-responses skills: bidding_conventions/puppet_stayman after 1N (P) 3C Puppet Stayman: asks for a four- or five-card major [alert] [artificial] shows strength>=game, H<=4, S<=4, H>=3 | S>=3 after 1N (P) 3C (P) 3D (P) 3N (P) P No fit: 3NT == smolen: Smolen: 5-4 in the majors after Stayman's denial file: conventions/notrump/smolen.bid card: notrump.smolen.play needs: stayman skills: bidding_conventions/smolen after (any auction) when answered majors, partner.H<=3, partner.S<=3 3H Smolen: four hearts, five spades, game forcing [alert] [artificial] shows H=4, S=5, strength>=game when style is not bba 3S Smolen: four spades, five hearts, game forcing [alert] [artificial] shows S=4, H=5, strength>=game when style is not bba 3H Smolen: four hearts, five spades, game forcing [alert] [artificial] shows H=4, S=5, hcp>=25-partner.hcp.min when style is bba 3S Smolen: four spades, five hearts, game forcing [alert] [artificial] shows S=4, H=5, hcp>=25-partner.hcp.min when style is bba after (any auction) when asked smolen(M) 3S Three spades and a maximum: slam interest shows S>=3, hcp>=shown.hcp.max when M is S 4{M} Three {M}: game in the five-three fit shows M>=3 3N Two {M}: no fit, play 3NT shows M<=2 after (any auction) when answered smolen(M), partner.last=3N 6N No fit, but slam values shows points>=32-partner.hcp.min P No fit: 3NT == stayman: Stayman file: conventions/notrump/stayman.bid card: notrump.stayman.play needs: notrump-base skills: bidding_conventions/stayman, partnership_bidding/stayman_transfers after nt1 when !they.bid | systems_on 2C Stayman: asks for a 4-card major [alert] [artificial] shows strength>=invite, H=4 | S=4 | (minors is four_way | minors is four_way_reversed, strength=invite, C<=5, D<=5), H<=4 | S<=3 | strength>=game when !shape 4333 | (minors is four_way | minors is four_way_reversed, strength=invite), style is not bba 2C Stayman: asks for a 4-card major [alert] [artificial] shows hcp>=24-partner.hcp.max, (H=4 | S=4, H<=5, S<=5, H<=4 | hcp>=25-partner.hcp.min) | (minors is four_way | minors is four_way_reversed, strength=invite, C<=5, D<=5) when style is bba 2C Stayman: invitational with a five-card major [alert] [artificial] shows H>=5 | S>=5, strength=invite, hcp>=7 when !jacoby, style is not bba after nt1 2C (P) 2H 4+ hearts shows H>=4 2S 4 spades, not 4 hearts shows S>=4, H<=3 2D No 4-card major shows H<=3, S<=3 after (any auction) when answered majors 2S Five spades, four hearts, invitational shows S=5, H=4, strength=invite when partner.last=2D, style is not bba 2S Five spades, four hearts, invitational shows S=5, H=4, hcp>=23-partner.hcp.min, hcp<=24-partner.hcp.min when partner.last=2D, style is bba 2H Five or more hearts, invitational shows H>=5, H>S, strength=invite when partner.last=2D, !jacoby, style is not bba 2S Five or more spades, invitational shows S>=5, strength=invite when partner.last=2D | partner.last=2H, !jacoby, style is not bba, H<=3 3S Five spades, game forcing shows S>=5, S>=H, strength>=game when partner.last=2D, !jacoby, !smolen 3H Five hearts, game forcing shows H>=5, H>S, strength>=game when partner.last=2D, !jacoby, !smolen 6H Slam in the heart fit shows H>=4, strength=slam when partner.H>=4 6S Slam in the spade fit shows S>=4, strength=slam when partner.S>=4 4H Game in the heart fit shows H>=4, strength>=game when partner.H>=4, style is not bba 3H Invitational raise in hearts shows H>=4, strength=invite when partner.H>=4, style is not bba 4S Game in the spade fit shows S>=4, strength>=game when partner.S>=4, style is not bba 3S Invitational raise in spades shows S>=4, strength=invite when partner.S>=4, style is not bba 6H Slam in the heart fit shows H>=4, tp(H)>=33-partner.points.min when partner.H>=4 6S Slam in the spade fit shows S>=4, tp(S)>=33-partner.points.min when partner.S>=4 4H Game in the heart fit shows H>=4, tp(H)>=25-partner.points.min when partner.H>=4, strength<=invite, style is not bba 4S Game in the spade fit shows S>=4, tp(S)>=25-partner.points.min when partner.S>=4, strength<=invite, style is not bba 4H Game in the heart fit shows H>=4, (hcp>=25-partner.hcp.min, !shape 4333) | hcp>=26-partner.hcp.min | (hcp>=24-partner.hcp.min, shortest<=0) when partner.H>=4, matchpoints, partner.hcp.min<=14 | partner.hcp.max>=18, style is bba 4H Game in the heart fit shows H>=4, (hcp>=24-partner.hcp.min, !shape 4333) | hcp>=25-partner.hcp.min | (hcp>=23-partner.hcp.min, shortest<=1) | (hcp>=22-partner.hcp.min, shortest<=0) when partner.H>=4, imps, partner.hcp.min<=14 | partner.hcp.max>=18, style is bba 3H Invitational raise in hearts shows H>=4, (hcp>=25-partner.hcp.max, !shape 4333) | hcp>=26-partner.hcp.max | (hcp>=24-partner.hcp.max, shortest<=1) | (hcp>=23-partner.hcp.max, shortest<=0), (hcp<=24-partner.hcp.min, shortest>=1) | (hcp<=25-partner.hcp.min, shape 4333) | hcp<=23-partner.hcp.min when partner.H>=4, matchpoints, partner.hcp.min<=14 | partner.hcp.max>=18, style is bba 3H Invitational raise in hearts shows H>=4, (hcp>=25-partner.hcp.max, !shape 4333) | hcp>=26-partner.hcp.max | (hcp>=24-partner.hcp.max, shortest<=1) | (hcp>=23-partner.hcp.max, shortest<=0), (hcp<=23-partner.hcp.min, shortest>=2) | (hcp<=24-partner.hcp.min, shape 4333) | (hcp<=22-partner.hcp.min, shortest=1) | hcp<=21-partner.hcp.min when partner.H>=4, imps, partner.hcp.min<=14 | partner.hcp.max>=18, style is bba P Weak with the heart fit: play here shows H>=4, (hcp<=24-partner.hcp.max, shortest>=2) | (hcp<=25-partner.hcp.max, shape 4333) | (hcp<=23-partner.hcp.max, shortest=1) | hcp<=22-partner.hcp.max when partner.H>=4, partner.hcp.min<=14 | partner.hcp.max>=18, style is bba 4S Game in the spade fit shows S>=4, (hcp>=25-partner.hcp.min, !shape 4333) | hcp>=26-partner.hcp.min | (hcp>=24-partner.hcp.min, shortest<=0) when partner.S>=4, matchpoints, partner.hcp.min<=14 | partner.hcp.max>=18, style is bba 4S Game in the spade fit shows S>=4, (hcp>=24-partner.hcp.min, !shape 4333) | hcp>=25-partner.hcp.min | (hcp>=23-partner.hcp.min, shortest<=1) | (hcp>=22-partner.hcp.min, shortest<=0) when partner.S>=4, imps, partner.hcp.min<=14 | partner.hcp.max>=18, style is bba 3S Invitational raise in spades shows S>=4, (hcp>=25-partner.hcp.max, !shape 4333) | hcp>=26-partner.hcp.max | (hcp>=24-partner.hcp.max, shortest<=1) | (hcp>=23-partner.hcp.max, shortest<=0), (hcp<=24-partner.hcp.min, shortest>=1) | (hcp<=25-partner.hcp.min, shape 4333) | hcp<=23-partner.hcp.min when partner.S>=4, matchpoints, partner.hcp.min<=14 | partner.hcp.max>=18, style is bba 3S Invitational raise in spades shows S>=4, (hcp>=25-partner.hcp.max, !shape 4333) | hcp>=26-partner.hcp.max | (hcp>=24-partner.hcp.max, shortest<=1) | (hcp>=23-partner.hcp.max, shortest<=0), (hcp<=23-partner.hcp.min, shortest>=2) | (hcp<=24-partner.hcp.min, shape 4333) | (hcp<=22-partner.hcp.min, shortest=1) | hcp<=21-partner.hcp.min when partner.S>=4, imps, partner.hcp.min<=14 | partner.hcp.max>=18, style is bba P Weak with the spade fit: play here shows S>=4, (hcp<=24-partner.hcp.max, shortest>=2) | (hcp<=25-partner.hcp.max, shape 4333) | (hcp<=23-partner.hcp.max, shortest=1) | hcp<=22-partner.hcp.max when partner.S>=4, partner.hcp.min<=14 | partner.hcp.max>=18, style is bba 6N Slam: 17 or more, no fit found shows points>=32-partner.hcp.min when style is not bba 4N Quantitative, no fit found shows balanced, strength=slam_invite, points<=31-partner.hcp.min when quant_4nt, style is not bba 3N Game: {game} total points, no fit found shows strength=game when style is not bba 2N Invitational: {invite} total points, no fit found shows strength=invite when style is not bba 4H Game in the heart fit shows H>=4, bba_stay_game_points>=10 when partner.H>=4, matchpoints, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 3H Invitational raise in hearts shows H>=4, bba_stay_raise_points>=8, bba_stay_game_points<=9 when partner.H>=4, matchpoints, partner.hcp.min>=15, partner.hcp.max<=17, style is bba P Weak with the heart fit: play here shows H>=4, bba_stay_raise_points<=7 when partner.H>=4, matchpoints, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 4H Game in the heart fit shows H>=4, bba_stay_game_imp_points>=10 when partner.H>=4, imps, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 3H Invitational raise in hearts shows H>=4, bba_stay_raise_imp_points>=8, bba_stay_game_imp_points<=9 when partner.H>=4, imps, partner.hcp.min>=15, partner.hcp.max<=17, style is bba P Weak with the heart fit: play here shows H>=4, bba_stay_raise_imp_points<=7 when partner.H>=4, imps, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 4S Game in the spade fit shows S>=4, bba_stay_sgame_points>=10 when partner.S>=4, matchpoints, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 3S Invitational raise in spades shows S>=4, bba_stay_sraise_points>=8, bba_stay_sgame_points<=9 when partner.S>=4, matchpoints, partner.hcp.min>=15, partner.hcp.max<=17, style is bba P Weak with the spade fit: play here shows S>=4, bba_stay_sraise_points<=7 when partner.S>=4, matchpoints, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 4S Game in the spade fit shows S>=4, bba_stay_sgame_imp_points>=10 when partner.S>=4, imps, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 3S Invitational raise in spades shows S>=4, bba_stay_sraise_imp_points>=8, bba_stay_sgame_imp_points<=9 when partner.S>=4, imps, partner.hcp.min>=15, partner.hcp.max<=17, style is bba P Weak with the spade fit: play here shows S>=4, bba_stay_sraise_imp_points<=7 when partner.S>=4, imps, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 6N Slam: 17 or more, no fit found shows points>=32-partner.hcp.min when style is bba 4N Quantitative, no fit found shows balanced, strength=slam_invite, hcp>=33-partner.hcp.max, points<=31-partner.hcp.min when quant_4nt, style is bba 3N Game: {game} total points, no major fit shows strength=game when partner.H<=3, partner.S<=3, partner.hcp.min<=14 | partner.hcp.max>=18, style is bba 2N Invitational, no major fit shows points>=24-partner.hcp.max, strength<=invite when partner.H<=3, partner.S<=3, partner.hcp.min<=14 | partner.hcp.max>=18, style is bba 3N Game, no heart fit shows H<=3, hcp>=10 | (hcp=9, tens>=2), strength<=game when partner.H>=4, matchpoints, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 2N Invitational, no heart fit shows H<=3, hcp>=7, hcp<=9, hcp<=8 | tens<=1, H<=2 | hcp>=8 | tens>=1 when partner.H>=4, matchpoints, partner.hcp.min>=15, partner.hcp.max<=17, style is bba P Weak, three hearts: play here shows H=3, hcp<=7, tens=0 when partner.H>=4, matchpoints, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 3N Game, no heart fit shows H<=3, hcp>=10 | (hcp=9, tens>=1 | shortest<=1), strength<=game when partner.H>=4, imps, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 2N Invitational, no heart fit shows H<=3, hcp>=7, hcp<=9, hcp<=8 | (tens=0, shortest>=2), H<=2 | hcp>=8 | tens>=2 when partner.H>=4, imps, partner.hcp.min>=15, partner.hcp.max<=17, style is bba P Weak, three hearts: play here shows H=3, hcp<=7, tens<=1 when partner.H>=4, imps, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 3N Game, no spade fit shows S<=3, hcp>=10 | (hcp=9, tens>=2), strength<=game when partner.S>=4, matchpoints, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 2N Invitational, no spade fit shows S<=3, hcp>=7, hcp<=9, hcp<=8 | tens<=1, S<=2 | hcp>=8 | tens>=1 when partner.S>=4, matchpoints, partner.hcp.min>=15, partner.hcp.max<=17, style is bba P Weak, three spades: play here shows S=3, hcp<=7, tens=0 when partner.S>=4, matchpoints, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 3N Game, no spade fit shows S<=3, hcp>=10 | (hcp=9, tens>=1 | shortest<=1), strength<=game when partner.S>=4, imps, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 2N Invitational, no spade fit shows S<=3, hcp>=7, hcp<=9, hcp<=8 | (tens=0, shortest>=2), S<=2 | hcp>=8 | tens>=2 when partner.S>=4, imps, partner.hcp.min>=15, partner.hcp.max<=17, style is bba P Weak, three spades: play here shows S=3, hcp<=7, tens<=1 when partner.S>=4, imps, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 3N Game: {game} total points, no heart fit shows strength=game, H<=3 when partner.H>=4, partner.hcp.min<=14 | partner.hcp.max>=18, style is bba 3N Game: {game} total points, no spade fit shows strength=game, S<=3 when partner.S>=4, partner.hcp.min<=14 | partner.hcp.max>=18, style is bba 2N Invitational, no heart fit shows points>=24-partner.hcp.max, strength<=invite, H<=3 when partner.H>=4, partner.hcp.min<=14 | partner.hcp.max>=18, style is bba 2N Invitational, no spade fit shows points>=24-partner.hcp.max, strength<=invite, S<=3 when partner.S>=4, partner.hcp.min<=14 | partner.hcp.max>=18, style is bba 3N Game: {game} total points, no major fit shows bba_stay_nt_points>=10, strength<=game when partner.H<=3, partner.S<=3, matchpoints, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 2N Invitational, no major fit shows points>=24-partner.hcp.max, bba_stay_nt_points<=9 when partner.H<=3, partner.S<=3, matchpoints, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 3N Game: {game} total points, no major fit shows bba_stay_nt_imp_points>=10, strength<=game when partner.H<=3, partner.S<=3, imps, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 2N Invitational, no major fit shows points>=24-partner.hcp.max, bba_stay_nt_imp_points<=9 when partner.H<=3, partner.S<=3, imps, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 3C Game values, five or more clubs shows C>=5, C>=D, (hcp>=9, !stop(D) | C>=6) | hcp>=12 when partner.H<=3, partner.S<=3, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 3D Game values, five or more diamonds shows D>=5, D>C, (hcp>=9, !stop(D) | D>=6) | hcp>=12 when partner.H<=3, partner.S<=3, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 3C Game values, five or more clubs, no heart fit shows C>=5, C>=D, H<=3, hcp>=10 | (C>=6, hcp>=9) when partner.H>=4, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 3D Game values, five or more diamonds, no heart fit shows D>=5, D>C, H<=3, hcp>=10 | (D>=6, hcp>=9) when partner.H>=4, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 3C Game values, five or more clubs, no spade fit shows C>=5, C>=D, S<=3, hcp>=10 | (C>=6, hcp>=9) when partner.S>=4, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 3D Game values, five or more diamonds, no spade fit shows D>=5, D>C, S<=3, hcp>=10 | (D>=6, hcp>=9) when partner.S>=4, partner.hcp.min>=15, partner.hcp.max<=17, style is bba P Six diamonds, weak: play 2D shows D>=6, hcp<=8 when partner.H<=3, partner.S<=3, partner.hcp.min>=15, partner.hcp.max<=17, style is bba P Three hearts and a six-card minor, weak: play 2H shows H=3, C>=6 | D>=6, hcp<=8 when partner.H>=4, partner.hcp.min>=15, partner.hcp.max<=17, style is bba P Three spades and a six-card minor, weak: play 2S shows S=3, C>=6 | D>=6, hcp<=8 when partner.S>=4, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 4C Slam try, six or more clubs shows C>=6, C>=D, hcp>=13 when partner.H<=3, partner.S<=3, matchpoints, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 4D Slam try, six or more diamonds shows D>=6, D>C, hcp>=13 when partner.H<=3, partner.S<=3, matchpoints, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 4C Slam try, six or more clubs shows C>=6, C>=D, hcp>=12 when partner.H<=3, partner.S<=3, imps, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 4D Slam try, six or more diamonds shows D>=6, D>C, hcp>=12 when partner.H<=3, partner.S<=3, imps, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 4C Slam try, six or more clubs, no heart fit shows H<=3, C>=6, C>=D, hcp>=13 when partner.H>=4, matchpoints, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 4D Slam try, six or more diamonds, no heart fit shows H<=3, D>=6, D>C, hcp>=13 when partner.H>=4, matchpoints, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 4C Slam try, six or more clubs, no heart fit shows H<=3, C>=6, C>=D, hcp>=12 when partner.H>=4, imps, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 4D Slam try, six or more diamonds, no heart fit shows H<=3, D>=6, D>C, hcp>=12 when partner.H>=4, imps, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 4C Slam try, six or more clubs, no spade fit shows S<=3, C>=6, C>=D, hcp>=13 when partner.S>=4, matchpoints, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 4D Slam try, six or more diamonds, no spade fit shows S<=3, D>=6, D>C, hcp>=13 when partner.S>=4, matchpoints, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 4C Slam try, six or more clubs, no spade fit shows S<=3, C>=6, C>=D, hcp>=12 when partner.S>=4, imps, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 4D Slam try, six or more diamonds, no spade fit shows S<=3, D>=6, D>C, hcp>=12 when partner.S>=4, imps, partner.hcp.min>=15, partner.hcp.max<=17, style is bba after (any auction) when asked fit_invite(M) 4M Accepts: a maximum shows points>=shown.hcp.max | (M>=5, points>=shown.hcp.max-1) P Declines: not a maximum shows points<=shown.hcp.max-1, M<=4 | points<=shown.hcp.max-2 after (any auction) when asked spades_invite 4S Accepts, three spades shows S>=3, hcp>=shown.hcp.max-1 3N Accepts, two spades shows S<=2, hcp>=shown.hcp.max-1 P Declines: a minimum shows hcp<=shown.hcp.max-2 after 1N (P) 2C (P) 2H (P) 2N (P) 3S (P) when style is bba 4S Game in the spade fit: the top of the invitation shows S>=4, hcp>=26-partner.hcp.max P Minimum: play 3S shows hcp<=25-partner.hcp.max after 1N (X) when vs_double 2C Stayman: asks for a 4-card major [alert] [artificial] shows hcp>=24-partner.hcp.max, H=4 | S=4 when H<=4, S<=4 after 1N (2C) when vs_2c X Stayman: asks for a 4-card major [alert] [artificial] shows strength>=invite, H=4 | S=4 when H<=4, S<=4 after 1N (X) 2C (P) when vs_double 2H 4+ hearts shows H>=4 2S 4 spades, not 4 hearts shows S>=4, H<=3 2D No 4-card major shows H<=3, S<=3 after 1N (2C) X (P) when vs_2c 2H 4+ hearts shows H>=4 2S 4 spades, not 4 hearts shows S>=4, H<=3 2D No 4-card major shows H<=3, S<=3 after 1N (P) 2C (P) 2D (P) 3C (P) when style is bba 5C Fit, a suit open, a maximum shows C>=4, !stop(D) | (S=2, !stop(S)) | (H=2, !stop(H)), points>=17 4C Fit, a suit open shows C>=4 | (C=3, points>=16), !stop(D) | (S=2, !stop(S)) | (H=2, !stop(H)) 4C Fit, a flat minimum shows C>=4, shortest>=3, points<=15 3D Minimum, no club fit shows C<=3, points<=15 3N To play shows hcp>=15 after 1N (P) 2C (P) 2D (P) 3D (P) when style is bba 5D Fit, a suit open, a maximum shows D>=3, !stop(C) | (S=2, !stop(S)) | (H=2, !stop(H)), points>=17 4D Fit, a suit open shows D>=4 | D=3, !stop(C) | (S=2, !stop(S)) | (H=2, !stop(H)) 4D Fit, a flat minimum shows D>=3, shortest>=3, points<=15 4C Minimum, five clubs shows D<=2, C>=5, points<=15 3N To play shows hcp>=15 after 1N (P) 2C (P) 2H (P) 3C (P) when style is bba 5C Fit, a suit open, a maximum shows C>=4, !stop(D), points>=17 4C Fit, a suit open shows C>=4 | (C=3, points>=16), !stop(D) 4C Fit, a flat minimum shows C>=3, shortest>=3, points<=15 3D Minimum, four diamonds shows D>=4, points<=15 3N To play shows hcp>=15 after 1N (P) 2C (P) 2H (P) 3D (P) when style is bba 5D Fit, a suit open, a maximum shows D>=3, !stop(C), points>=17 4D Fit, a suit open shows D>=4 | D=3, !stop(C) 4D Fit, a flat minimum shows D>=3, shortest>=3, points<=15 3N To play shows hcp>=15 after 1N (P) 2C (P) 2S (P) 3C (P) when style is bba 5C Fit, a suit open, a maximum shows C>=4, !stop(D), points>=17 4C Fit, a suit open shows C>=4 | (C=3, points>=16), !stop(D) 4C Fit, a flat minimum shows C>=3, shortest>=3, points<=15 3D Minimum, four diamonds shows D>=4, points<=15 3H Minimum, flat, three hearts shows H=3, shortest>=3, points<=15 3N To play shows hcp>=15 after 1N (P) 2C (P) 2S (P) 3D (P) when style is bba 3H Minimum, flat, three hearts shows H=3, shortest>=3, points<=15 5D Fit, a suit open, a maximum shows D>=3, !stop(C), points>=17 4D Fit, a suit open shows D>=4 | D=3, !stop(C) 4D Fit, a flat minimum shows D>=3, shortest>=3, points<=15 3N To play shows hcp>=15 after 1N (P) 2C (P) 2D (P) 3C (P) 4C (P) when style is bba 5C Game in the minor shows hcp>=11 P Too weak for game shows hcp<=10 after 1N (P) 2C (P) 2D (P) 3D (P) 4D (P) when style is bba 5D Game in the minor shows hcp>=11 P Too weak for game shows hcp<=10 after 1N (P) 2C (P) 2H (P) 3C (P) 4C (P) when style is bba 5C Game in the minor shows hcp>=11 P Too weak for game shows hcp<=10 after 1N (P) 2C (P) 2H (P) 3D (P) 4D (P) when style is bba 5D Game in the minor shows hcp>=11 P Too weak for game shows hcp<=10 after 1N (P) 2C (P) 2S (P) 3C (P) 4C (P) when style is bba 5C Game in the minor shows hcp>=11 P Too weak for game shows hcp<=10 after 1N (P) 2C (P) 2S (P) 3D (P) 4D (P) when style is bba 5D Game in the minor shows hcp>=11 P Too weak for game shows hcp<=10 after 1N (P) 2C (P) 2D (P) 3C (P) 3D (P) | 1N (P) 2C (P) 2H (P) 3C (P) 3D (P) | 1N (P) 2C (P) 2S (P) 3C (P) 3D (P) | 1N (P) 2C (P) 2S (P) 3C (P) 3H (P) | 1N (P) 2C (P) 2S (P) 3D (P) 3H (P) when style is bba 3N To play shows hcp>=9, hcp<=14 4N Quantitative shows hcp>=15 when quant_4nt after 1N (P) 2C (P) 2D (P) 3D (P) 4C (P) when style is bba 4H Four hearts shows H>=4 4S Four spades shows S>=4 after 1N (P) 2C (P) 2D (P) 4C (P) when style is bba 4D Five diamonds, two clubs shows C<=2, D>=5 5C To play shows hcp>=15 after 1N (P) 2C (P) 2D (P) 4D (P) when style is bba 5C Five clubs, two diamonds shows D<=2, C>=5 5D To play shows hcp>=15 after 1N (P) 2C (P) 2D (P) 4C (P) 5C (P) when style is bba 6C Slam shows hcp>=14 P Game is enough shows hcp<=13 after 1N (P) 2C (P) 2D (P) 4D (P) 5D (P) when style is bba 6D Slam shows hcp>=14 P Game is enough shows hcp<=13 after 1N (P) 2C (P) 2D (P) 4C (P) 4D (P) when style is bba 6C Slam shows hcp>=14 5C Game shows hcp<=13 after 1N (P) 2C (P) 2D (P) 4D (P) 5C (P) when style is bba 6D Slam shows hcp>=14 5D Game shows hcp<=13 after 1N (P) 2C (P) 2H (P) 4C (P) when style is bba 4D Five diamonds, two clubs shows C<=2, D>=5 5C To play shows hcp>=15 after 1N (P) 2C (P) 2H (P) 4D (P) when style is bba 5C Five clubs, two diamonds shows D<=2, C>=5 5D To play shows hcp>=15 after 1N (P) 2C (P) 2H (P) 4C (P) 5C (P) when style is bba 6C Slam shows hcp>=14 P Game is enough shows hcp<=13 after 1N (P) 2C (P) 2H (P) 4D (P) 5D (P) when style is bba 6D Slam shows hcp>=14 P Game is enough shows hcp<=13 after 1N (P) 2C (P) 2H (P) 4C (P) 4D (P) when style is bba 6C Slam shows hcp>=14 5C Game shows hcp<=13 after 1N (P) 2C (P) 2H (P) 4D (P) 5C (P) when style is bba 6D Slam shows hcp>=14 5D Game shows hcp<=13 after 1N (P) 2C (P) 2S (P) 4C (P) when style is bba 4D Five diamonds, two clubs shows C<=2, D>=5 5C To play shows hcp>=15 after 1N (P) 2C (P) 2S (P) 4D (P) when style is bba 5C Five clubs, two diamonds shows D<=2, C>=5 5D To play shows hcp>=15 after 1N (P) 2C (P) 2S (P) 4C (P) 5C (P) when style is bba 6C Slam shows hcp>=14 P Game is enough shows hcp<=13 after 1N (P) 2C (P) 2S (P) 4D (P) 5D (P) when style is bba 6D Slam shows hcp>=14 P Game is enough shows hcp<=13 after 1N (P) 2C (P) 2S (P) 4C (P) 4D (P) when style is bba 6C Slam shows hcp>=14 5C Game shows hcp<=13 after 1N (P) 2C (P) 2S (P) 4D (P) 5C (P) when style is bba 6D Slam shows hcp>=14 5D Game shows hcp<=13 == super-accept: Super-accepting a Jacoby transfer file: conventions/notrump/super-accept.bid card: notrump.transfers.super_accept needs: jacoby-transfers skills: bidding_conventions/super_accept after nt1 2D (P) when system is not brill 3H Super-accept: 4+ hearts, a maximum shows H>=4, hcp>=16 after nt1 2H (P) when system is not brill 3S Super-accept: 4+ spades, a maximum shows S>=4, hcp>=16 after nt1 2D (P) when system is brill 3H Four or more hearts, a minimum shows H>=4, hcp<=15, shortest<=2 after nt1 2H (P) when system is brill 3S Four or more spades, a minimum shows S>=4, hcp<=15, shortest<=2 == superaccept-doubleton: Superaccept doubleton file: conventions/notrump/superaccept-doubleton.bid card: notrump.transfers.super_accept_doubleton needs: super-accept skills: bidding_conventions/super_accept after nt1 2D (P) 2S Super-accept: 4+ hearts, maximum, doubleton spade [alert] [artificial] shows H>=4, hcp>=16, S=2, !has(Q,S) 2N Super-accept: 4+ hearts, maximum, a doubleton [alert] [artificial] shows H>=4, hcp>=16, shortest=2 after nt1 2H (P) 2N Super-accept: 4+ spades, maximum, a doubleton [alert] [artificial] shows S>=4, hcp>=16, shortest=2 after nt1 2D (P) when system is brill 2N Super-accept: 4 hearts, maximum, 3=4=3=3 [alert] [artificial] shows H=4, S=3, D=3, C=3, hcp>=16 after nt1 2H (P) when system is brill 2N Super-accept: 4 spades, maximum, 4=3=3=3 [alert] [artificial] shows S=4, H=3, D=3, C=3, hcp>=16 == texas-transfers: Texas Transfers file: conventions/notrump/texas-transfers.bid card: notrump.transfers.texas needs: notrump-base skills: bidding_conventions/jacoby_transfers define texas_room_d = !tu, !me.named(H), rho.last=P | rho.last=X | (they.level<=2, they.strain is not H) | (they.level=3, they.strain is C) define texas2_room_c = tu, !me.named(H), rho.last=P | rho.last=X | (they.level<=2, they.strain is not H) define texas2_room_d = tu, !me.named(S), rho.last=P | rho.last=X | (they.level<=2, they.strain is not S) | (they.level=3, they.strain is C) define texas_room_h = !tu, !me.named(S), rho.last=P | rho.last=X | (they.level<=2, they.strain is not S) | (they.level=3, they.strain is C | they.strain is D) after systems 1N (*) | systems 2N (*) | 2C (*) 2D (*) 3N (P) 4D Texas: 6+ ♥, game only or slam values [announce: Transfer] [artificial] shows H>=6, points>=25-partner.points.min, suit_points<=30-partner.points.max when texas_room_d 4D Texas: 6+ ♥, game only or slam values [announce: Transfer] [artificial] shows H>=6, suit_points>=33-partner.points.min when texas_room_d 4D Texas: 6+ ♥, game only or slam values [announce: Transfer] [artificial] shows H>=6, tp(H)>=33-partner.points.min when texas_room_d 4H Texas: 6+ ♠, game only or slam values [announce: Transfer] [artificial] shows S>=6, points>=25-partner.points.min, suit_points<=30-partner.points.max when texas_room_h 4H Texas: 6+ ♠, game only or slam values [announce: Transfer] [artificial] shows S>=6, suit_points>=33-partner.points.min when texas_room_h 4H Texas: 6+ ♠, game only or slam values [announce: Transfer] [artificial] shows S>=6, tp(S)>=33-partner.points.min when texas_room_h 4D Texas: 6+ ♥, game only or slam values [announce: Transfer] [artificial] shows H>=7, hcp>=4, suit_strength=signoff when !(rho.last=P | rho.last=X), texas_room_d 4H Texas: 6+ ♠, game only or slam values [announce: Transfer] [artificial] shows S>=7, hcp>=4, suit_strength=signoff when !(rho.last=P | rho.last=X), texas_room_h 4C 2-under Texas: 6+ ♥, game only or slam values [announce: Transfer] [artificial] shows H>=6, points>=25-partner.points.min, suit_points<=30-partner.points.max when texas2_room_c 4C 2-under Texas: 6+ ♥, game only or slam values [announce: Transfer] [artificial] shows H>=6, suit_points>=33-partner.points.min when texas2_room_c 4C 2-under Texas: 6+ ♥, game only or slam values [announce: Transfer] [artificial] shows H>=6, tp(H)>=33-partner.points.min when texas2_room_c 4D 2-under Texas: 6+ ♠, game only or slam values [announce: Transfer] [artificial] shows S>=6, points>=25-partner.points.min, suit_points<=30-partner.points.max when texas2_room_d 4D 2-under Texas: 6+ ♠, game only or slam values [announce: Transfer] [artificial] shows S>=6, suit_points>=33-partner.points.min when texas2_room_d 4D 2-under Texas: 6+ ♠, game only or slam values [announce: Transfer] [artificial] shows S>=6, tp(S)>=33-partner.points.min when texas2_room_d 4C 2-under Texas: 6+ ♥, game only or slam values [announce: Transfer] [artificial] shows H>=7, hcp>=4, suit_strength=signoff when !(rho.last=P | rho.last=X), texas2_room_c 4D 2-under Texas: 6+ ♠, game only or slam values [announce: Transfer] [artificial] shows S>=7, hcp>=4, suit_strength=signoff when !(rho.last=P | rho.last=X), texas2_room_d after (any auction) when asked texas(H) 4H Completes the transfer after (any auction) when asked texas(S) 4S Completes the transfer after (any auction) when answered texas(M) 4N Keycard ask in {M} [artificial] shows suit_points>=33-partner.points.min 4N Keycard ask in {M} [artificial] shows tp(M)>=33-partner.points.min P No slam interest after (any auction) when asked texas2(H) 4D Super-accept: four hearts, a maximum [artificial] shows H>=4, hcp>=shown.hcp.max-1 4H Completes the transfer after (any auction) when asked texas2(S) 4H Super-accept: four spades, a maximum [artificial] shows S>=4, hcp>=shown.hcp.max-1 4S Completes the transfer after (any auction) when answered texas2(M) 4N Keycard ask in {M} [artificial] shows suit_points>=33-partner.points.min 4N Keycard ask in {M} [artificial] shows tp(M)>=33-partner.points.min 4{M} Signoff when !partner.last=4{M} P No slam interest when partner.last=4{M} == two-nt-minors: Minor-suit transfers and Minor Suit Stayman over 2NT file: conventions/notrump/two-nt-minors.bid needs: two-nt-responses skills: bidding_conventions/minor_suit_transfers, bidding_conventions/minor_suit_stayman after nt2 when mst, !mss 3S Relay to 4♣: six or more of a minor, weak [alert] [artificial] shows C>=6 | D>=6, H<=3, S<=3, hcp<=24-partner.hcp.max when !we.forcing=game after nt2 3S (P) when mst, !mss 4C Completes the relay [alert] [artificial] after nt2 3S (P) 4C (P) when mst, !mss P To play: clubs shows C>=6, hcp<=24-partner.hcp.max 4D To play: diamonds shows D>=6, D>C, hcp<=24-partner.hcp.max 5C Game: clubs shows C>=6, C>=D, hcp>=25-partner.hcp.max 5D Game: diamonds shows D>=6, D>C, hcp>=25-partner.hcp.max after nt2 3S (P) 4C (P) 4D (P) when mst, !mss P Partner's diamonds, to play after nt2 when mss 3S Minor Suit Stayman: 5-4+ in the minors, slam interest [alert] [artificial] shows C>=4, D>=4, C+D>=9, H<=3, S<=3, strength>=slam_invite after nt2 3S (P) when mss 4C Four or more clubs shows C>=4 4D Four or more diamonds, not four clubs shows D>=4, C<=3 3N No four-card minor [alert] [artificial] shows C<=3, D<=3 after nt2 3S (P) 4m (P) when mss 4N Keycard ask in {m} [alert] [artificial] shows tp(m)>=33-partner.hcp.min when k1430 | k0314 6m Slam in the minor fit shows tp(m)>=33-partner.hcp.min 5m Game in the minor fit after nt2 3S (P) 3N (P) when mss 4C Gerber: how many aces? [alert] [artificial] shows points>=32-partner.hcp.min when gerber 6N No fit: slam values shows points>=32-partner.hcp.min 6C Slam in my long clubs shows C>=6, points>=32-partner.hcp.min 6D Slam in my long diamonds shows D>=6, points>=32-partner.hcp.min 4N No fit: quantitative, invites 6NT shows strength=slam_invite, points<=31-partner.hcp.min P No fit: 3NT == two-nt-responses: Responses to a 2NT opening file: conventions/notrump/two-nt-responses.bid needs: notrump-base skills: partnership_bidding/basic_notrump, bidding_conventions/stayman, bidding_conventions/jacoby_transfers define auction nt2 = systems 2N (P) after nt2 3C Stayman: asks for a four-card major [alert] [artificial] shows H=4 | S=4, strength>=game when stayman, !puppet, !shape 4333, style is not bba 3D Transfer to hearts [announce: Transfer] [artificial] shows H>=5 when jacoby 3H Transfer to spades [announce: Transfer] [artificial] shows S>=5 when jacoby 3N To play: {game} total points shows strength>=game, H<=4, S<=4 when style is not bba 4N Quantitative: {slam_invite} total points, invites 6NT shows balanced, strength=slam_invite when quant_4nt, style is not bba 6N Slam: {slam} total points shows balanced, strength=slam when style is not bba P No game: {signoff}-{invite} total points shows strength<=invite when style is not bba 3C Stayman: asks for a four-card major [alert] [artificial] shows hcp>=25-partner.hcp.min, H=4 | S=4 when stayman, !puppet, style is bba 3H Transfer to spades, 5-5 in the majors [announce: Transfer] [artificial] shows S>=5, H>=5 when jacoby, style is bba 3N To play: game values shows hcp>=25-partner.hcp.min, H<=4, S<=4 when style is bba 4N Quantitative: invites 6NT shows balanced, hcp>=32-partner.hcp.max, points<=31-partner.hcp.min, H<=4, S<=4 when quant_4nt, style is bba 6N Slam shows balanced, points>=32-partner.hcp.min, H<=4, S<=4 when style is bba P No game: 4 HCP or less shows hcp<=24-partner.hcp.min when style is bba after nt2 when style is not bba 4C Slam try: six or more clubs, or five and unbalanced shows C>=6 | (C>=5, !balanced), strength>=slam_invite, H<=4, S<=4 when !gerber, !tu 4D Slam try: six or more diamonds, or five and unbalanced shows D>=6 | (D>=5, !balanced), strength>=slam_invite, H<=4, S<=4 when !texas after nt2 4x (P) when (x is C, !gerber, !tu) | (x is D, !texas), style is not bba 6{x} A fit: slam shows x>=3 4N No fit shows x<=2 after nt2 4x (P) 4N (P) when (x is C, !gerber, !tu) | (x is D, !texas), style is not bba 6N No fit, but slam values shows strength>=slam P No fit: 4NT after nt2 3C (P) when !puppet 3H 4+ hearts shows H>=4 3S 4 spades, not 4 hearts shows S>=4, H<=3 3D No four-card major shows H<=3, S<=3 after nt2 3D (P) 3H Completes transfer after nt2 3H (P) 3S Completes transfer after nt2 3D (P) 3H (P) P Weak: play here shows hcp<=24-partner.hcp.max 3N Choice of games: five hearts, game values shows H=5, hcp>=25-partner.hcp.max 4H Game, six or more hearts shows H>=6, hcp>=25-partner.hcp.max after nt2 3H (P) 3S (P) P Weak: play here shows hcp<=24-partner.hcp.max 3N Choice of games: five spades, game values shows S=5, hcp>=25-partner.hcp.max 4S Game, six or more spades shows S>=6, hcp>=25-partner.hcp.max after nt2 when puppet 3C Puppet Stayman: asks for a four- or five-card major [alert] [artificial] shows strength>=game, H<=4, S<=4, H>=3 | S>=3 when style is not bba 3C Puppet Stayman: asks for a four- or five-card major [alert] [artificial] shows hcp>=25-partner.hcp.min, H<=4, S<=4, H>=3 | S>=3 when style is bba after (any auction) when asked puppet 3H Five hearts shows H>=5 3S Five spades shows S>=5, H<=4 3D A four-card major, no five [artificial] shows H=4 | S=4, H<=4, S<=4 3N No four- or five-card major shows H<=3, S<=3 after (any auction) when answered puppet, partner.last=3D 3H Four spades, not four hearts [alert] [artificial] shows S=4, H<=3 3S Four hearts, not four spades [alert] [artificial] shows H=4, S<=3 4D Both majors, no slam interest: opener chooses [alert] [artificial] shows H=4, S=4, strength<=game 4C Both majors, slam interest: opener chooses [alert] [artificial] shows H=4, S=4, strength>=slam_invite 7N No four-card major: grand slam shows H<=3, S<=3, points>=37-partner.hcp.min 6N No four-card major: slam shows H<=3, S<=3, points>=32-partner.hcp.min 4N No four-card major: quantitative, invites 6NT shows H<=3, S<=3, balanced, strength=slam_invite, points<=31-partner.hcp.min when quant_4nt 3N No four-card major: game shows H<=3, S<=3, strength>=game after (any auction) when asked puppet_fit(x) 4{x} Four {x}: game in the fit shows x=4 3N No four {x} shows x<=3 after (any auction) when asked puppet_both 4S Four spades shows S=4 4H Four hearts, not four spades shows H=4, S<=3 after nt2 3C (P) 3D (P) 3N (P) when puppet P No fit: 3NT after (any auction) when answered puppet_fit(x), partner.last=4{x} 6{x} Slam in the fit shows tp(x)>=33-partner.hcp.min P Game in the fit after (any auction) when answered puppet_both, we.trump is suit 6{trump} Slam in the fit shows tp(trump)>=33-partner.hcp.min P Game in the fit after (any auction) when answered puppet, partner.last=3H 6H Slam in the five-three fit shows H>=3, tp(H)>=33-partner.hcp.min 4H Game in the five-three fit shows H>=3 6N No fit: slam shows H<=2, points>=32-partner.hcp.min 4N No fit: quantitative, invites 6NT shows H<=2, balanced, strength=slam_invite, points<=31-partner.hcp.min when quant_4nt 3N No fit: game shows H<=2 after (any auction) when answered puppet, partner.last=3S 6S Slam in the five-three fit shows S>=3, tp(S)>=33-partner.hcp.min 4S Game in the five-three fit shows S>=3 6N No fit: slam shows S<=2, points>=32-partner.hcp.min 4N No fit: quantitative, invites 6NT shows S<=2, balanced, strength=slam_invite, points<=31-partner.hcp.min when quant_4nt 3N No fit: game shows S<=2 after (any auction) when answered puppet, partner.last=3N 4C Gerber: how many aces? [alert] [artificial] shows points>=32-partner.hcp.min when gerber 6N No fit: slam shows points>=32-partner.hcp.min 4N No fit: quantitative, invites 6NT shows balanced, strength=slam_invite, points<=31-partner.hcp.min when quant_4nt P No fit: 3NT after (any auction) when answered puppet_fit(x), partner.last=3N 4C Gerber: how many aces? [alert] [artificial] shows points>=32-partner.hcp.min when gerber 6N No fit: slam shows points>=32-partner.hcp.min 4N No fit: quantitative, invites 6NT shows balanced, strength=slam_invite, points<=31-partner.hcp.min when quant_4nt P No fit: 3NT == benjamin: Benjamin 2♣ and 2♦ file: conventions/openings/benjamin.bid card: two_level.benjamin.play needs: strong-openings skills: bidding_conventions/benjamin_2d after (any auction) when opening 2C Benjamin 2♣: 22-23, or a strong two [alert] [artificial] shows hcp=22..23 | (!balanced, hcp=20..23, losers<=4, (S>=6, quality(S)>=good) | (H>=6, quality(H)>=good) | (D>=6, quality(D)>=good) | (C>=6, quality(C)>=good) | shape 5-5-x-x | shape 6-5-x-x) 2D Benjamin 2♦: game forcing, 24+ [alert] [artificial] shows hcp>=24 | (hcp=23, longest<=4) 2D Benjamin 2♦: game in hand, 22+ and at most one loser [alert] [artificial] shows hcp>=22, losers<=1 after 2C (P) 2D (P) 2M (P) 3M Three or more {M}: a raise with some values shows M>=3, hcp>=4 after (any auction) when asked benjamin 2S Five or more spades, any strength shows S>=5, S>=H 2H Five or more hearts, any strength shows H>=5, H>S 3C Six or more clubs, no five-card major shows C>=6, C>=D, H<=4, S<=4 3D Six or more diamonds, no five-card major shows D>=6, D>C, H<=4, S<=4 3N Positive: 7+ HCP, no five-card major or six-card minor shows hcp>=7, H<=4, S<=4, D<=5, C<=5 2N Negative: 0-6, no five-card major or six-card minor [artificial] after 2D (P) 2y (P) | 2D (P) 3y (P) when y is not N cheapest(y) Raise: three or more {y} shows y>=3 cheapest(S) Five or more spades shows S>=5 when y is not S cheapest(H) Five or more hearts shows H>=5 when y is not H cheapest(D) Five or more diamonds shows D>=5 when y is not D cheapest(C) Five or more clubs shows C>=5 when y is not C cheapest(N) No fit, no suit to show after 2D (P) 2M (P) 3M (P) 4M Weak: 0-5, game shows hcp<=5 after 2D (P) 2M (P) 3M (P) 4M (P) | 2D (P) 2N (P) 3M (P) 4M (P) P No slam interest shows losers>=3 after 2D (P) 2y (P) 2z (P) | 2D (P) 2y (P) 3z (P) | 2D (P) 3y (P) 3z (P) when y is not N, z is not N, z is not y cheapest(z) Three or more {z}: agrees it shows z>=3 cheapest(y) Six or more {y} shows y>=6 when y is H | y is S cheapest(y) Seven or more {y} shows y>=7 when y is C | y is D cheapest(N) No fit after 2D (P) 3N (P) 7N Grand slam shows hcp+partner.hcp.min>=37 5N Slam: 6NT, or 7NT with a maximum shows hcp>=23 after 2D (P) 3N (P) 5N (P) 7N A maximum: 12+ HCP shows hcp>=12 6N 6NT after 2D (P) 2N (P) 3C Five or more clubs shows C>=5 3D Five or more diamonds shows D>=5 3H Five or more hearts shows H>=5 3S Five or more spades shows S>=5 3N Balanced shows balanced 4N Balanced 28+: invites 6NT shows balanced, hcp>=28 after 2D (P) 2N (P) 3z (P) when z is not N 4z Three or more {z} shows z>=3 when z is H | z is S 3N No fit == flannery: Flannery 2♦ file: conventions/openings/flannery.bid card: two_level.flannery.play needs: preempts skills: bidding_conventions/flannery after (any auction) when opening 2D Flannery: 11-15 HCP, four spades and five hearts [alert] [artificial] shows S=4, H=5, hcp=11..15 after 2D (P) | 2D (X) P Six or more diamonds, weak: to play shows D>=6, hcp<=9, H<=2, S<=3 2S To play: no game interest shows hcp<=9, S>=4 | (S=3, H<=1) 2H To play: no game interest shows hcp<=10 3C Six or more clubs: to play shows C>=6, hcp<=9, H<=2, S<=3 3D Six or more diamonds, invitational shows D>=6, hcp=10..12, H<=2, S<=3 3H Invitational: three or more hearts, 10-12 shows H>=3, tp(H)=10..12, S<=3 3S Invitational: four or more spades, 10-12 shows S>=4, tp(S)=10..12 4C Transfer to 4♥: game, no slam interest [alert] [artificial] shows H>=3, tp(H)>=13, tp(H)<=18, S<=3 4D Transfer to 4♠: game, no slam interest [alert] [artificial] shows S>=4, tp(S)>=13, tp(S)<=18 3N To play: the minors held, no major fit shows hcp=13..17, H<=2, S<=3, stop(C), stop(D) 2N Asks opener's shape: game interest [alert] [artificial] shows hcp>=11 after 2D (P) 2H (P) | 2D (P) 2S (P) | 2D (P) 3C (P) | 2D (P) 3N (P) P No further bid after 2D (P) 3H (P) 4H Accepts the invitation: 14-15 shows hcp>=14 P Declines: a minimum after 2D (P) 3S (P) 4S Accepts the invitation: 14-15 shows hcp>=14 P Declines: a minimum after 2D (P) 3D (P) 3N Accepts: a maximum with the clubs stopped shows hcp>=14, stop(C) P Declines after 2D (P) 4C (P) 4H Completes the transfer after 2D (P) 4D (P) 4S Completes the transfer after (any auction) when asked flannery 3C Three clubs: 4-5-1-3 [artificial] shows D=1, C=3 3D Three diamonds: 4-5-3-1 [artificial] shows D=3, C=1 3H 4-5-2-2, minimum, 11-13 shows D=2, C=2, hcp<=13 3S 4-5-2-2, maximum, 14-15 [artificial] shows D=2, C=2, hcp>=14 3N 4-5-2-2, maximum, the minors held shows D=2, C=2, hcp>=14, stop(C), stop(D) 4C Four clubs: 4-5-0-4 [artificial] shows D=0, C=4 4D Four diamonds: 4-5-4-0 [artificial] shows D=4, C=0 after (any auction) when answered flannery P 3NT is the contract when partner.last=3N 4S Game in the spade fit shows S>=4 4H Game in the heart fit shows H>=2 when !partner.last=3N 3N To play: the short suit held shows stop(C) | partner.C.min>=2, stop(D) | partner.D.min>=2 when partner.last<=3S == french-2d: French 2♦ (game forcing) file: conventions/openings/french-2d.bid card: two_level.french_2d.play needs: strong-openings skills: bidding_conventions/french_2d after (any auction) when opening 2D French 2♦: game forcing, 24+ HCP [alert] [artificial] shows hcp>=24 after (any auction) when asked french_2d 3N Two aces or more [artificial] shows keycards(N)>=2 2S One ace: the ♥A or the ♠A [artificial] shows keycards(N)=1, has(A,H) | has(A,S) 3C One ace: the ♣A [artificial] shows keycards(N)=1, has(A,C) 3D One ace: the ♦A [artificial] shows keycards(N)=1, has(A,D) 3H No ace, 0-7: five or more hearts shows keycards(N)=0, hcp<=7, H>=5, H>=S 3S No ace, 0-7: five or more spades shows keycards(N)=0, hcp<=7, S>=5, S>H 2N No ace, 8+ [artificial] shows keycards(N)=0, hcp>=8 2H No ace, 0-7 [artificial] shows keycards(N)=0, hcp<=7 after 2D (P) 3H (P) 4H Three or more hearts: agrees hearts shows H>=3 after 2D (P) 3S (P) 4S Three or more spades: agrees spades shows S>=3 after 2D (P) 3N (P) 6N Balanced: slam opposite two aces shows balanced, hcp>=25 P Balanced 24: game shows balanced after 2D (P) 2H (P) | 2D (P) 2S (P) | 2D (P) 2N (P) | 2D (P) 3C (P) | 2D (P) 3D (P) | 2D (P) 3H (P) | 2D (P) 3S (P) | 2D (P) 3N (P) cheapest(S) Five or more spades shows S>=5 cheapest(H) Five or more hearts shows H>=5 cheapest(D) Five or more diamonds shows D>=5 cheapest(C) Five or more clubs shows C>=5 cheapest(N) Balanced shows balanced == kokish: Kokish relay after 2♣–2♦ file: conventions/openings/kokish.bid card: two_level.two_clubs.kokish needs: strong-openings skills: bidding_conventions/kokish after 2C (P) 2D (P) 2H Kokish: hearts, or 24-25 balanced [alert] [artificial] shows (H>=5, !balanced) | (balanced, hcp=24..25) after (any auction) when asked kokish 2S Completes the relay [alert] [artificial] after (any auction) when answered kokish 2N 24-25 balanced shows balanced, hcp=24..25 3H Six or more hearts, one-suited shows H>=6, S<=3, D<=3, C<=3 3C Five or more hearts, four or more clubs shows H>=5, C>=4 3D Five or more hearts, four or more diamonds shows H>=5, D>=4 3S Five or more hearts, four or more spades shows H>=5, S>=4 after 2C (P) 2D (P) 2H (P) 2S (P) 3x (P) when x is not H 3H Three or more hearts: agrees hearts shows H>=3 4x Four or more {x}: agrees {x} shows x>=4, H<=2 when x is S 4x Four or more {x}: agrees {x} shows x>=4, H<=2 when x is C | x is D 3N No fit: notrump shows H<=2 after 2C (P) 2D (P) 2H (P) 2S (P) 3H (P) 4H Two or more hearts: game in hearts shows H>=2 3N A singleton or void in hearts shows H<=1 == mccabe: McCabe adjunct file: conventions/openings/mccabe.bid card: two_level.mccabe.play needs: weak-two-responses skills: bidding_conventions/mccabe after 2x (X) when weak_two_suit(x), x is D | x is H | x is S 3y McCabe: a raise, lead {y} [alert] [artificial] shows x>=3, quality(y)>=good, hcp<=14 when y is not x, y is C | (y is D, x is not D) | (y is H, x is S) 2N Asks: how good is the weak two? [alert] [artificial] shows hcp>=15, x>=2 XX McCabe: own long suit, asks for the next step [alert] [artificial] shows x<=1, longest>=6, hcp<=14 after 2x (X) 3y (P) when weak_two_suit(x), x is D | x is H | x is S, y is not x 3x Back to my suit after 2D (X) XX (P) 2H Next step, as asked [artificial] after 2H (X) XX (P) 2S Next step, as asked [artificial] after 2S (X) XX (P) 2N Next step, as asked [artificial] after 2D (X) XX (P) 2H (P) | 2H (X) XX (P) 2S (P) | 2S (X) XX (P) 2N (P) P My suit: to play shows H>=6 when partner.last=2H P My suit: to play shows S>=6 when partner.last=2S 2S My suit: to play shows S>=6 3C My suit: to play shows C>=6 3D My suit: to play shows D>=6 3H My suit: to play shows H>=6 after 2D (X) XX (*) | 2H (X) XX (*) | 2S (X) XX (*) P No further bid == mini-roman: Mini-Roman 2♦ file: conventions/openings/mini-roman.bid card: two_level.two_diamonds.mini_roman needs: preempts skills: bidding_conventions/mini_roman_2d define three_suiter = (longest=4, shortest=1) | (longest=5, second_longest=4, shortest=0, S<=4, H<=4) after (any auction) when opening 2D Mini-Roman: 11-15, 4-4-4-1 or 5-4-4-0 [alert] [artificial] shows hcp=11..15, three_suiter after 2D (P) | 2D (X) 2N Asks for the short suit: 11+, game forcing [alert] [artificial] shows hcp>=11 4H To play shows H>=6, hcp=8..14 4S To play shows S>=6, hcp=8..14 3H Invitational: five or more hearts shows H>=5, hcp=9..10 3S Invitational: five or more spades shows S>=5, hcp=9..10 P Five or more diamonds: to play shows D>=5, hcp<=10 2H To play: four or more hearts shows H>=4, hcp<=10 2S To play: four or more spades shows S>=4, hcp<=10, H<=3 3C To play: five or more clubs shows C>=5, hcp<=10, H<=3, S<=3 2H Weak: pass or correct shows hcp<=10 after 2D (P) 2H (P) | 2D (X) 2H (P) P Four or more hearts shows H>=4 2S Short in hearts: four spades shows H<=1, S>=4 3C Short in hearts, no four spades: clubs shows H<=1, C>=4 after 2D (P) 2S (P) | 2D (X) 2S (P) P Four or more spades shows S>=4 3C Short in spades: clubs shows S<=1, C>=4 after 2D (P) 3C (P) | 2D (X) 3C (P) P Four or more clubs shows C>=4 3D Short in clubs: diamonds shows C<=1, D>=4 after 2D (P) 2H (P) 2S (P) | 2D (P) 2H (P) 3C (P) | 2D (P) 2S (P) 3C (P) | 2D (P) 3C (P) 3D (P) P Partner's suit: to play after 2D (P) 3H (P) 4H Accepts: 14-15 with four hearts shows H>=4, hcp>=14 P Declines after 2D (P) 3S (P) 4S Accepts: 14-15 with four spades shows S>=4, hcp>=14 P Declines after (any auction) when asked mini_roman 3C Short clubs shows C<=1 3D Short diamonds shows D<=1 3H Short hearts shows H<=1 3S Short spades shows S<=1 after 2D (P) 2N (P) 3x (P) 4S Game in spades shows S>=4 when x is not S 4H Game in hearts shows H>=4 when x is not H 3N Game in notrump: the short suit held shows x>=4 | stop(x) 5C Game in clubs shows C>=4 when x is not C 5D Game in diamonds shows D>=4 when x is not D 3N Game in notrump after 2D (2y) | 2D (3y) when y is not D 4S Game: 11+ and spades shows S>=5 | (S>=4, y is H), hcp>=11 when y is not S 4H Game: 11+ and hearts shows H>=5 | (H>=4, y is S), hcp>=11 when y is not H 3N Game: 11+, {y} stopped shows hcp>=11, stop(y) X 11+: values, defence or a game for opener to choose shows hcp>=11 P Not enough to act after 2D (2y) X (P) | 2D (3y) X (P) P Defend: three or more {y} shows y>=3 cheapest(S) Short in {y}: four spades shows S>=4, y<=1 when y is not S cheapest(H) Short in {y}: four hearts shows H>=4, y<=1 when y is not H cheapest(C) Short in {y}: four clubs shows C>=4, y<=1 when y is not C cheapest(D) Short in {y}: four diamonds shows D>=4, y<=1 when y is not D after 2D (2y) X (P) 2z (P) | 2D (2y) X (P) 3z (P) | 2D (3y) X (P) 3z (P) | 2D (3y) X (P) 4z (P) 4{z} Game in {z} shows z>=4 when z is H | z is S 3N Game in notrump: {y} stopped shows stop(y) 5{z} Game in {z} shows z>=3 when z is C | z is D P Partner's suit: to play after 2D (P) 2H (*) | 2D (P) 2S (*) | 2D (P) 3C (*) P No further bid == multi: Multi 2♦ file: conventions/openings/multi.bid card: two_level.two_diamonds.multi needs: preempts skills: bidding_conventions/multi_2d after (any auction) when opening, seat<=3 2D Multi: a weak two in hearts or spades [alert] [artificial] shows hcp=5..10, (H=6, S<=3, hcp<=9 | !has(A,H) | (!has(K,H), !has(A,S), !has(A,D), !has(A,C))) | (S=6, H<=3, hcp<=9 | !has(A,S) | (!has(K,S), !has(A,H), !has(A,D), !has(A,C))) when !vul | (H=6, quality(H)>=good | top5(H)>=3) | (S=6, quality(S)>=good | top5(S)>=3) after 2D (P) | 2D (X) 2H Pass or correct: no game interest [alert] shows hcp<=14 2S Pass or correct: three or more hearts, short spades [alert] shows H>=3, S<=2, hcp=6..14 3H Pass or correct, preemptive: three or more in both majors [alert] shows H>=3, S>=3, H+S>=8, hcp<=10 4H Pass or correct to game: 4+ in both majors [alert] shows H>=4, S>=4, hcp<=12 4D Game: bid your major [alert] [artificial] shows hcp>=15, H>=3, S>=3 3C Six or more clubs: to play shows C>=6, H<=2, S<=2, hcp<=14 2N Asks: which major, minimum or maximum? [alert] [artificial] shows hcp>=15 after 2D (P) 2H (P) | 2D (X) 2H (P) P My suit is hearts shows H=6 2S My suit is spades shows S=6 after 2D (P) 2S (P) | 2D (X) 2S (P) P My suit is spades shows S=6 3H My suit is hearts shows H=6 after 2D (P) 3H (P) | 2D (X) 3H (P) P My suit is hearts shows H=6 3S My suit is spades shows S=6 after 2D (P) 4H (P) | 2D (X) 4H (P) P My suit is hearts shows H=6 4S My suit is spades shows S=6 after 2D (P) 4D (P) | 2D (X) 4D (P) 4H My suit is hearts shows H=6 4S My suit is spades shows S=6 after 2D (P) 3C (P) | 2D (X) 3C (P) P Partner's suit: to play after 2D (P) 2H (*) | 2D (P) 2S (*) P No further bid after 2D (P) 2H (P) 2S (P) | 2D (P) 2S (P) 3H (P) | 2D (P) 3H (P) 3S (P) | 2D (P) 4H (P) 4S (P) | 2D (X) 2H (P) 2S (P) | 2D (X) 2S (P) 3H (P) | 2D (X) 3H (P) 3S (P) | 2D (X) 4H (P) 4S (P) P Partner's major: to play after 2D (P) 2N (P) 3C (P) 3H (P) | 2D (P) 2N (P) 3D (P) 3S (P) P No further bid after (any auction) when asked multi 3C Maximum with hearts: 8-10 [artificial] shows H=6, hcp>=8 3D Maximum with spades: 8-10 [artificial] shows S=6, hcp>=8 3H Minimum with hearts shows H=6, hcp<=7 3S Minimum with spades shows S=6, hcp<=7 after 2D (P) 2N (P) 3C (P) 4H Game opposite a maximum shows H>=2 | hcp>=18 3H No game: sign off after 2D (P) 2N (P) 3D (P) 4S Game opposite a maximum shows S>=2 | hcp>=18 3S No game: sign off after 2D (P) 2N (P) 3H (P) 4H Game opposite a minimum shows H>=2, hcp>=18 | (H>=3, hcp>=16) P No game: play 3♥ after 2D (P) 2N (P) 3S (P) 4S Game opposite a minimum shows S>=2, hcp>=18 | (S>=3, hcp>=16) P No game: play 3♠ == namyats: Namyats: 4♣/4♦ strong major preempts file: conventions/openings/namyats.bid card: preempts.namyats.play needs: preempts skills: bidding_conventions/namyats after (any auction) when opening, seat<=3 4C Namyats: a strong preempt in hearts, 8-9 tricks [alert] [artificial] shows H=7, has(A,H), has(K,H), has(Q,H), hcp=9..13, S<=3, !has(A,S), !has(K,S), !has(A,D), !has(K,D), !has(A,C), !has(K,C) 4D Namyats: a strong preempt in spades, 8-9 tricks [alert] [artificial] shows S=7, has(A,S), has(K,S), has(Q,S), hcp=9..13, H<=3, !has(A,H), !has(K,H), !has(A,D), !has(K,D), !has(A,C), !has(K,C) after 4C (P) | 4C (X) 4H Sign-off: no slam interest 4D Relay: slam interest in hearts [alert] [artificial] shows controls>=5 | hcp>=15, quick_tricks>=3 after 4D (P) | 4D (X) 4S Sign-off: no slam interest 4H Relay: slam interest in spades [alert] [artificial] shows controls>=5 | hcp>=15, quick_tricks>=3 after 4C (P) 4H (P) | 4D (P) 4S (P) P No further bid after (any auction) when asked namyats(t) 4{t} No side shortness: back to my suit 4S A singleton or void in spades shows S<=1 when t is H 5C A singleton or void in clubs shows C<=1 5D A singleton or void in diamonds shows D<=1 5H A singleton or void in hearts shows H<=1 when t is S == polish-two-suiters: Polish two-suiters: 2♥ and 2♠ file: conventions/openings/polish-two-suiters.bid card: two_level.polish_two_suiters.play needs: preempts skills: bidding_conventions/polish_two_suiters after (any auction) when opening, seat<=3 2H Polish: five hearts and another five-card suit, 5-11 [alert] shows H>=5, S>=5 | D>=5 | C>=5, hcp=5..11 2S Polish: five spades and a five-card minor, 5-11 [alert] shows S>=5, H<=4, D>=5 | C>=5, hcp=5..11 after 2H (P) | 2H (X) P Hearts: to play shows H>=3, hcp<=14 2S Pass or correct: no heart fit [alert] [artificial] shows H<=2, hcp<=14 3H Preemptive raise: four or more hearts shows H>=4, hcp<=9 4H Game in hearts shows H>=3, hcp>=15 2N Asks for the second suit: game interest [alert] [artificial] shows hcp>=15 after 2S (P) | 2S (X) P Spades: to play shows S>=2, hcp<=14 3C Pass or correct: no spade fit [alert] [artificial] shows S<=1, hcp<=14 3S Preemptive raise: four or more spades shows S>=4, hcp<=9 4S Game in spades shows S>=3, hcp>=15 2N Asks for the minor: game interest [alert] [artificial] shows hcp>=15 after 2H (P) 2S (P) | 2H (X) 2S (P) P My second suit is spades shows S>=5 3C My second suit is clubs shows C>=5 3D My second suit is diamonds shows D>=5 after 2S (P) 3C (P) | 2S (X) 3C (P) P My minor is clubs shows C>=5 3D My minor is diamonds shows D>=5 after 2H (P) 3H (P) | 2S (P) 3S (P) | 2H (P) 4H (P) | 2S (P) 4S (P) P No further bid after 2H (P) 2S (P) 3x (P) | 2S (P) 3C (P) 3D (P) P Partner's suit: to play after (any auction) when asked polish(t) 3C My second suit is clubs shows C>=5 3D My second suit is diamonds shows D>=5 3H My second suit is spades [artificial] shows S>=5 when t is H after (any auction) when answered polish(t) 4{t} Game in the major shows t>=3 4S Game in spades: opener's second suit shows S>=3 when t is H, partner.last=3H 3N Game in notrump shows hcp>=16 5C Game in clubs shows C>=3 when partner.last=3C 5D Game in diamonds shows D>=3 when partner.last=3D == precision-2d: Precision 2♦ file: conventions/openings/precision-2d.bid card: two_level.precision_2d.play needs: preempts skills: bidding_conventions/precision_2d define prec_2d_shape = (S=4, H=4, D=1, C=4) | (S=4, H=4, D=0, C=5) | (S=4, H=3, D=1, C=5, quality(C)<=fair) | (S=3, H=4, D=1, C=5, quality(C)<=fair) after (any auction) when opening 2D Precision 2♦: 11-15, short diamonds [alert] [artificial] shows hcp=11..15, prec_2d_shape after 2D (P) | 2D (X) 2N Asks for shape and strength: 11+, game forcing [alert] [artificial] shows hcp>=11 P Six or more diamonds: to play shows D>=6, hcp<=10 3D Six or more diamonds: invites 3NT shows D>=6, hcp=9..10, quality(D)>=good 3H Preemptive: six or more hearts shows H>=6, hcp<=8 3S Preemptive: six or more spades shows S>=6, hcp<=8 2S Sign-off shows S>=3, S>H, hcp<=10 2H Sign-off shows H>=3, hcp<=10 3C Sign-off shows C>=4, hcp<=10, S<=2, H<=2 2H Sign-off shows hcp<=10 after 2D (P) 2H (P) | 2D (P) 2S (P) | 2D (P) 3C (P) | 2D (P) 3H (P) | 2D (P) 3S (P) | 2D (X) 2H (P) | 2D (X) 2S (P) | 2D (X) 3C (P) P No further bid after 2D (P) 3D (P) 3N Accepts: 14-15 shows hcp>=14 P Declines after (any auction) when asked precision_2d 3C 3-4-1-5 shows S=3, H=4, C=5 3D 4-3-1-5 shows S=4, H=3, C=5 3H 4-4-1-4, 11-13 shows S=4, H=4, D=1, hcp<=13 3S 4-4-1-4, 14-15 shows S=4, H=4, D=1, hcp>=14 3N 4-4-1-4, 14-15, the ♦A or ♦K shows S=4, H=4, D=1, hcp>=14, has(A,D) | has(K,D) 4C 4-4-0-5, 11-13 shows S=4, H=4, D=0, hcp<=13 4D 4-4-0-5, 14-15 shows S=4, H=4, D=0, hcp>=14 after 2D (P) 2N (P) 3x (P) | 2D (P) 2N (P) 4x (P) | 2D (P) 2N (P) 3N (P) 4S Game in spades shows S>=4 | (S>=5, partner.S>=3) when partner.S>=4 | (partner.S>=3, S>=5) 4H Game in hearts shows H>=4 | (H>=5, partner.H>=3) when partner.H>=4 | (partner.H>=3, H>=5) 3N Game in notrump: diamonds held shows stop(D), D>=3 5C Game in clubs shows C>=3 P Partner's 3NT when partner.last=3N 3N Game in notrump after 2D (P) 2H (*) | 2D (P) 2S (*) | 2D (P) 3C (*) P No further bid == reverse-flannery: Reverse Flannery file: conventions/openings/reverse-flannery.bid needs: responses skills: bidding_conventions/reverse_flannery after 1m (P) 2H Reverse Flannery: five spades, four or five hearts, 5-8 HCP [alert] shows S=5, H=4..5, hcp=5..8 when rf_2h 2S Reverse Flannery: five spades, four hearts, 9-10 HCP [alert] shows S=5, H=4, hcp=9..10 when rf_2s after 1m (P) 2H (P) when rf_2h P To play in hearts: hearts longer than spades shows H>S, S<=2, hcp<=15 2S To play in spades shows hcp<=15 3m Six or more of my minor: to play shows m>=6, S<=1, H<=2, hcp<=15 2N Asks: which shape and which half of the range? [alert] [artificial] shows hcp>=16 4S Game in spades shows S>=3, hcp>=18 4H Game in hearts shows H>=4, H>S, hcp>=18 after (any auction) when asked reverse_flannery 3C 5-4 in the majors, 5-6 HCP [artificial] shows H=4, hcp<=6 3D 5-4 in the majors, 7-8 HCP [artificial] shows H=4, hcp>=7 3H 5-5 in the majors, 5-6 HCP shows H=5, hcp<=6 3S 5-5 in the majors, 7-8 HCP shows H=5, hcp>=7 after (any auction) when answered reverse_flannery 4S Game in spades shows S>=3, S>=H | partner.H.max<=4, hcp+partner.hcp.min>=23 4H Game in hearts shows H>=4, H>S, hcp+partner.hcp.min>=23 3N Game in notrump: no major fit shows S<=2, H<=3, hcp+partner.hcp.min>=23 P Partner's 3♠: play there when partner.last=3S 3S Sign off in spades when !partner.last=3S 4H Sign off: hearts are the fit shows H>=4, H>S when partner.last=3S after 1m (P) 2S (P) when rf_2s P A minimum with two spades: play 2♠ shows S=2, hcp<=14 3S Three or more spades, a minimum: invites game shows S>=3, tp(S)<=14 2N Short spades, a minimum: no fit shows S<=1, hcp<=14 3H Four hearts, short spades: to play shows H>=4, S<=1, hcp<=14 3m Six or more of my minor, short spades: to play shows m>=6, S<=1, hcp<=14 4S Game in spades shows S>=3, tp(S)>=15 4H Game in hearts shows H>=4, S<=2, hcp>=15 3N Game in notrump: no fit shows S<=2, H<=3, hcp>=15 after 1m (P) 2S (P) 3S (P) when rf_2s 4S Accepts: 10 HCP shows hcp>=10 P Declines: 9 HCP after 1m (P) 2S (P) 3x (P) when rf_2s, x is not S P No further bid after 1m (P) 2S (P) 2N (P) when rf_2s P No game: play 2NT shows hcp<=9 3N 10 HCP: game after 1m (P) 2H (P) 3m (P) | 1m (P) 2H (P) 2S (P) when rf_2h P No further bid == vs-multi: Defence to a Multi 2♦ file: conventions/openings/vs-multi.bid needs: base skills: bidding_conventions/multi_2d after (2D) when maybe rho.H>=6, maybe rho.S>=6, maybe rho.D<=3 X 13-15 balanced, or 16+ any shape shows (balanced, hcp=13..15) | hcp>=16 2H Natural: five or more hearts, not forcing shows H>=5, hcp=10..15 2S Natural: five or more spades, not forcing shows S>=5, hcp=10..15 2N 16-18 balanced shows balanced, hcp=16..18 3C Natural: six or more clubs shows C>=6, hcp=10..15 3D Natural: six or more diamonds shows D>=6, hcp=10..15 3H Natural: six or more hearts, a good overcall shows H>=6, hcp=13..16 3S Natural: six or more spades, a good overcall shows S>=6, hcp=13..16 P No overcall after (2D) P (2H) when maybe lho.H>=6, maybe lho.S>=6, maybe lho.D<=3 X Takeout of hearts: 13+ shows H<=2, S>=3, hcp>=13 2S Natural: five or more spades shows S>=5, hcp=10..15 2N 15-18 balanced shows balanced, hcp=15..18 3C Natural: six or more clubs shows C>=6, hcp=10..15 3D Natural: six or more diamonds shows D>=6, hcp=10..15 P No overcall after (2D) P (2S) when maybe lho.H>=6, maybe lho.S>=6, maybe lho.D<=3 X Takeout of spades: 13+ shows S<=2, H>=3, hcp>=13 2N 15-18 balanced shows balanced, hcp=15..18 3C Natural: six or more clubs shows C>=6, hcp=10..15 3D Natural: six or more diamonds shows D>=6, hcp=10..15 3H Natural: five or more hearts shows H>=5, hcp=11..15 P No overcall == wilkosz: Wilkosz 2♦ file: conventions/openings/wilkosz.bid card: two_level.wilkosz.play needs: preempts skills: bidding_conventions/wilkosz define wilkosz_shape = (H>=5, S>=5) | (H>=5, C>=5) | (H>=5, D>=5) | (S>=5, C>=5) | (S>=5, D>=5) after (any auction) when opening, seat<=3 2D Wilkosz: 5-5 in two suits, one a major, 5-10 [alert] [artificial] shows hcp=5..10, wilkosz_shape after 2D (P) | 2D (X) 2N Asks for the suits: 14+ [alert] [artificial] shows hcp>=14 4D Game: bid your major [alert] [artificial] shows H>=3, S>=3, hcp=12..13 3D Invitational: three or more in both majors [alert] [artificial] shows H>=3, S>=3, hcp=10..11 3C Six or more clubs: to play shows C>=6, hcp<=13 2S Pass or correct: spades if you have them [alert] shows S>=3, S>H, hcp<=13 2H Pass or correct: hearts if you have them [alert] [artificial] shows hcp<=13 after 2D (P) 2H (P) | 2D (X) 2H (P) P Five or more hearts shows H>=5 2S Spades and a minor shows S>=5, H<=4 after 2D (P) 2S (P) | 2D (X) 2S (P) P Five or more spades shows S>=5 3C Hearts and clubs shows H>=5, C>=5, S<=4 3D Hearts and diamonds shows H>=5, D>=5, S<=4 after 2D (P) 3C (P) | 2D (X) 3C (P) P Partner's suit: to play after 2D (P) 3D (P) | 2D (X) 3D (P) 4S Maximum, spades shows S>=5, hcp>=9, S>=H 4H Maximum, hearts shows H>=5, hcp>=9 3S Minimum, spades shows S>=5, S>=H 3H Minimum, hearts shows H>=5 after 2D (P) 4D (P) | 2D (X) 4D (P) 4S Spades shows S>=5, S>=H 4H Hearts shows H>=5 after 2D (P) 2H (P) 2S (P) | 2D (X) 2H (P) 2S (P) P Two or more spades: to play shows S>=2 3C Short in spades: pass or correct to your minor shows S<=1 after 2D (P) 2H (P) 2S (P) 3C (P) | 2D (X) 2H (P) 2S (P) 3C (P) P Spades and clubs shows C>=5 3D Spades and diamonds shows D>=5 after 2D (P) 2S (P) 3C (P) | 2D (P) 2S (P) 3D (P) | 2D (P) 2H (P) 2S (P) 3C (P) 3D (P) | 2D (P) 3D (P) 3H (P) | 2D (P) 3D (P) 3S (P) P Partner's suit: to play after 2D (P) 2H (*) | 2D (P) 2S (*) P No further bid after (any auction) when asked wilkosz 3H Both majors shows H>=5, S>=5 3C Clubs and a major shows C>=5 3D Diamonds and hearts shows D>=5, H>=5 3S Spades and diamonds shows S>=5, D>=5 after 2D (P) 2N (P) 3C (P) 3D Which major? [artificial] after 2D (P) 2N (P) 3C (P) 3D (P) 3H Hearts and clubs shows H>=5 3S Spades and clubs shows S>=5 after 2D (P) 2N (P) 3H (P) | 2D (P) 2N (P) 3D (P) | 2D (P) 2N (P) 3S (P) | 2D (P) 2N (P) 3C (P) 3D (P) 3H (P) | 2D (P) 2N (P) 3C (P) 3D (P) 3S (P) 4S Game in spades shows S>=3 when partner.S>=5 4H Game in hearts shows H>=3 when partner.H>=5 3N Game in notrump 5D Game in diamonds shows D>=3 when partner.D>=5 5C Game in clubs shows C>=3 when partner.C>=5 == blackwood: Blackwood (standard) file: conventions/slam/blackwood.bid card: slam.blackwood.standard needs: base skills: bidding_conventions/blackwood, partnership_bidding/blackwood define bw_kings = controls-keycards(N)-keycards(N) define partner_kings = partner.last=6D+partner.last=6H+partner.last=6H+partner.last=6S+partner.last=6S+partner.last=6S+partner.last=6N+partner.last=6N+partner.last=6N+partner.last=6N after (any auction) when we.trump is suit, !minor_given_way, !asked, we.forcing=none | we.forcing=round 4N Blackwood: how many aces? [artificial] when slam_values_limited, !two_bare_suits after (any auction) when we.trump is suit, !minor_given_way, !asked, we.forcing=game, !answered control 4N Blackwood: how many aces? [artificial] when slam_values after (any auction) when we.trump is none, !asked, !they.bid 4N Blackwood, agreeing ♠: how many aces? [artificial] when shown_fit(S), we.fit(S).min>=8, fit_slam_values(S), !two_bare_beside(S) 4N Blackwood, agreeing ♥: how many aces? [artificial] when shown_fit(H), we.fit(H).min>=8, fit_slam_values(H), !two_bare_beside(H) 4N Blackwood, agreeing ♠: how many aces? [artificial] when kc_open(S), !shown_fit(S), !shown_fit(H), we.fit(S).min>=8, fit_slam_values(S), !two_bare_beside(S) 4N Blackwood, agreeing ♥: how many aces? [artificial] when kc_open(H), !shown_fit(S), !shown_fit(H), we.fit(H).min>=8, fit_slam_values(H), !two_bare_beside(H) 4N Blackwood, agreeing ♦: how many aces? [artificial] when kc_open(D), !shown_fit(S), !shown_fit(H), we.fit(D).min>=8, fit_slam_values(D), !two_bare_beside(D), hcp+partner.hcp.min>=30 4N Blackwood, agreeing ♣: how many aces? [artificial] when kc_open(C), !shown_fit(S), !shown_fit(H), we.fit(C).min>=8, fit_slam_values(C), !two_bare_beside(C), hcp+partner.hcp.min>=30 after (any auction) when minor_given_way, !asked 4N Blackwood, agreeing ♠: how many aces? [artificial] when major_over_minor(S), fit_slam_values(S), !two_bare_beside(S) 4N Blackwood, agreeing ♥: how many aces? [artificial] when major_over_minor(H), !major_over_minor(S), fit_slam_values(H), !two_bare_beside(H) after (any auction) when we.trump is suit, asked control(t) 4N Blackwood: how many aces? [artificial] when all_covered after (any auction) when we.trump is suit, answered control(t), partner.last=4{trump} 4N Blackwood: how many aces? [artificial] when all_covered_by_us after (any auction) when asked aces 5C 0 or 4 aces [artificial] shows keycards(N) in 0|4 5D 1 ace [artificial] shows keycards(N)=1 5H 2 aces [artificial] shows keycards(N)=2 5S 3 aces [artificial] shows keycards(N)=3 after (any auction) when answered aces 5N King ask: all the aces held [artificial] when kask5n, we.keycards(N)=4 6{trump} Small slam when we.keycards(N)>=3 P To play when partner.last=5{trump}, we.keycards(N).max<=2 5{trump} Signoff when we.keycards(N).max<=2 6{trump} Small slam when maybe we.keycards(N)>=3 after (any auction) when kask5n, asked kings(N) 6C No king [artificial] shows bw_kings=0 6D One king [artificial] shows bw_kings=1 6H Two kings [artificial] shows bw_kings=2 6S Three kings [artificial] shows bw_kings=3 6N Four kings [artificial] shows bw_kings=4 after (any auction) when kask5n, answered kings(N) 7{trump} Grand slam when bw_kings+partner_kings>=4 7{trump} Grand slam when bw_kings+partner_kings>=3, hcp+partner.hcp.min>=33 P To play when partner.last=6{trump} 6{trump} Small slam 6N Small slam == control-bids: Control bids before the keycard ask file: conventions/slam/control-bids.bid card: slam.cue_bids.play needs: base skills: bidding_conventions/control_bids, partnership_bidding/slam_bidding after (any auction) when we.trump is suit, !asked, !answered control, trump is H | trump is S, we.forcing=game cheapest(C) Control bid in ♣ [alert] [artificial] when trump is not C, !partner.cued(C), !me.cued(C), under_game(C), slam_values, side_suit_uncontrolled, controlled(C), denials_promised cheapest(D) Control bid in ♦ [alert] [artificial] when trump is not D, !partner.cued(D), !me.cued(D), under_game(D), slam_values, side_suit_uncontrolled, controlled(D), denials_promised cheapest(H) Control bid in ♥ [alert] [artificial] when trump is not H, !partner.cued(H), !me.cued(H), under_game(H), slam_values, side_suit_uncontrolled, controlled(H), denials_promised cheapest(S) Control bid in ♠ [alert] [artificial] when trump is not S, !partner.cued(S), !me.cued(S), under_game(S), slam_values, side_suit_uncontrolled, controlled(S), denials_promised after (any auction) when we.trump is suit, !asked, !answered control, trump is H | trump is S, we.forcing=none | we.forcing=round cheapest(C) Control bid in ♣ [alert] [artificial] when trump is not C, !partner.cued(C), !me.cued(C), under_game(C), slam_values_limited, side_suit_uncontrolled, controlled(C), denials_promised cheapest(D) Control bid in ♦ [alert] [artificial] when trump is not D, !partner.cued(D), !me.cued(D), under_game(D), slam_values_limited, side_suit_uncontrolled, controlled(D), denials_promised cheapest(H) Control bid in ♥ [alert] [artificial] when trump is not H, !partner.cued(H), !me.cued(H), under_game(H), slam_values_limited, side_suit_uncontrolled, controlled(H), denials_promised cheapest(S) Control bid in ♠ [alert] [artificial] when trump is not S, !partner.cued(S), !me.cued(S), under_game(S), slam_values_limited, side_suit_uncontrolled, controlled(S), denials_promised after (any auction) when we.trump is suit, asked control(t), trump is H | trump is S cheapest(C) Control bid in ♣ [alert] [artificial] when trump is not C, !partner.cued(C), !me.cued(C), under_game(C), controlled(C), denials_promised cheapest(D) Control bid in ♦ [alert] [artificial] when trump is not D, !partner.cued(D), !me.cued(D), under_game(D), controlled(D), denials_promised cheapest(H) Control bid in ♥ [alert] [artificial] when trump is not H, !partner.cued(H), !me.cued(H), under_game(H), controlled(H), denials_promised cheapest(S) Control bid in ♠ [alert] [artificial] when trump is not S, !partner.cued(S), !me.cued(S), under_game(S), controlled(S), denials_promised cheapest(C) Control bid in ♣: first-round control [alert] [artificial] when trump is not C, !partner.cued(C), !me.cued(C), !under_game(C), (trump is H, cheapest_rank(C)<27) | (trump is S, cheapest_rank(C)<28), first_round(C), denials_promised_first cheapest(D) Control bid in ♦: first-round control [alert] [artificial] when trump is not D, !partner.cued(D), !me.cued(D), !under_game(D), (trump is H, cheapest_rank(D)<27) | (trump is S, cheapest_rank(D)<28), first_round(D), denials_promised_first cheapest(H) Control bid in ♥: first-round control [alert] [artificial] when trump is not H, !partner.cued(H), !me.cued(H), !under_game(H), (trump is H, cheapest_rank(H)<27) | (trump is S, cheapest_rank(H)<28), first_round(H), denials_promised_first cheapest(S) Control bid in ♠: first-round control [alert] [artificial] when trump is not S, !partner.cued(S), !me.cued(S), !under_game(S), !kb_spade_ask, (trump is H, cheapest_rank(S)<27) | (trump is S, cheapest_rank(S)<28), first_round(S), denials_promised_first 4{trump} Signoff: no further control 5{trump} Signoff: no further control after (any auction) when we.trump is suit, answered control(t), partner.last=4{trump}, trump is H | trump is S, !me.denied(C), !me.denied(D), !me.denied(H), !me.denied(S) cheapest(C) Control bid in ♣: first-round control [alert] [artificial] when trump is not C, !partner.cued(C), !me.cued(C), (trump is H, cheapest_rank(C)<27) | (trump is S, cheapest_rank(C)<28), slam_values, first_round(C), denials_promised_first cheapest(D) Control bid in ♦: first-round control [alert] [artificial] when trump is not D, !partner.cued(D), !me.cued(D), (trump is H, cheapest_rank(D)<27) | (trump is S, cheapest_rank(D)<28), slam_values, first_round(D), denials_promised_first cheapest(H) Control bid in ♥: first-round control [alert] [artificial] when trump is not H, !partner.cued(H), !me.cued(H), (trump is H, cheapest_rank(H)<27) | (trump is S, cheapest_rank(H)<28), slam_values, first_round(H), denials_promised_first cheapest(S) Control bid in ♠: first-round control [alert] [artificial] when trump is not S, !partner.cued(S), !me.cued(S), !kb_spade_ask, (trump is H, cheapest_rank(S)<27) | (trump is S, cheapest_rank(S)<28), slam_values, first_round(S), denials_promised_first P No further bid == dopi-ropi: DOPI and ROPI: answering an ace or keycard ask over interference file: conventions/slam/dopi-ropi.bid needs: base skills: bidding_conventions/dopi_ropi define kc_first_14(t) = (gstyle is not bba, !m0314 | t is H | t is S) | (gstyle is bba, !k0314) define rho_bid = !rho.last=P, !rho.last=X, !rho.last=XX define lho_bid = !lho.last=P, !lho.last=X, !lho.last=XX define partner_bid = !partner.last=P, !partner.last=X, !partner.last=XX define dopi_bid = rho_bid, rho.last<=5S define ropi_dbl = rho.last=X define kc_two_missing(t) = we.keycards(t).max<=3 after (any auction) when dopi, !depo, asked keycards(t), dopi_bid X DOPI: 1 or 4 keycards [artificial] shows keycards(t) in 1|4 when kc_first_14(t) P DOPI: 0 or 3 keycards [artificial] shows keycards(t) in 0|3 when kc_first_14(t) X DOPI: 0 or 3 keycards [artificial] shows keycards(t) in 0|3 when !kc_first_14(t) P DOPI: 1 or 4 keycards [artificial] shows keycards(t) in 1|4 when !kc_first_14(t) after (any auction) when ropi, asked keycards(t), ropi_dbl XX ROPI: 1 or 4 keycards [artificial] shows keycards(t) in 1|4 when kc_first_14(t) P ROPI: 0 or 3 keycards [artificial] shows keycards(t) in 0|3 when kc_first_14(t) XX ROPI: 0 or 3 keycards [artificial] shows keycards(t) in 0|3 when !kc_first_14(t) P ROPI: 1 or 4 keycards [artificial] shows keycards(t) in 1|4 when !kc_first_14(t) 5C ROPI: 2 keycards, no {t} queen [artificial] shows keycards(t)=2, !has(Q,t) 5D ROPI: 2 keycards and the {t} queen [artificial] shows keycards(t)=2, has(Q,t) after (any auction) when dopi, !depo, asked keycards(t) 5D DOPI: 2 keycards, no {t} queen [artificial] shows keycards(t)=2, !has(Q,t) when rho.last=5C 5H DOPI: 2 keycards and the {t} queen [artificial] shows keycards(t)=2, has(Q,t) when rho.last=5C 5H DOPI: 2 keycards, no {t} queen [artificial] shows keycards(t)=2, !has(Q,t) when rho.last=5D 5S DOPI: 2 keycards and the {t} queen [artificial] shows keycards(t)=2, has(Q,t) when rho.last=5D 5S DOPI: 2 keycards, no {t} queen [artificial] shows keycards(t)=2, !has(Q,t) when rho.last=5H 5N DOPI: 2 keycards and the {t} queen [artificial] shows keycards(t)=2, has(Q,t) when rho.last=5H 5N DOPI: 2 keycards, no {t} queen [artificial] shows keycards(t)=2, !has(Q,t) when rho.last=5S 6C DOPI: 2 keycards and the {t} queen [artificial] shows keycards(t)=2, has(Q,t) when rho.last=5S after (any auction) when depo, asked keycards(t), dopi_bid X DEPO: 0, 2 or 4 keycards [artificial] shows keycards(t) in 0|2|4 P DEPO: 1 or 3 keycards [artificial] shows keycards(t) in 1|3|5 after (any auction) when depo, asked aces, dopi_bid X DEPO: 0, 2 or 4 aces [artificial] shows keycards(N) in 0|2|4 P DEPO: 1 or 3 aces [artificial] shows keycards(N) in 1|3 after (any auction) when dopi, !depo, asked aces, dopi_bid X DOPI: 0 or 4 aces [artificial] shows keycards(N) in 0|4 P DOPI: 1 ace [artificial] shows keycards(N)=1 after (any auction) when ropi, asked aces, ropi_dbl XX ROPI: 0 or 4 aces [artificial] shows keycards(N) in 0|4 P ROPI: 1 ace [artificial] shows keycards(N)=1 5C ROPI: 2 aces [artificial] shows keycards(N)=2 5D ROPI: 3 aces [artificial] shows keycards(N)=3 after (any auction) when dopi, !depo, asked aces 5D DOPI: 2 aces [artificial] shows keycards(N)=2 when rho.last=5C 5H DOPI: 3 aces [artificial] shows keycards(N)=3 when rho.last=5C 5H DOPI: 2 aces [artificial] shows keycards(N)=2 when rho.last=5D 5S DOPI: 3 aces [artificial] shows keycards(N)=3 when rho.last=5D 5S DOPI: 2 aces [artificial] shows keycards(N)=2 when rho.last=5H 5N DOPI: 3 aces [artificial] shows keycards(N)=3 when rho.last=5H 5N DOPI: 2 aces [artificial] shows keycards(N)=2 when rho.last=5S 6C DOPI: 3 aces [artificial] shows keycards(N)=3 when rho.last=5S after (any auction) when dopi | ropi | depo, answered keycards(t), rho.last=P P Defend doubled: two keycards missing when partner.last=X, kc_two_missing(t), lho_bid, lho.last<=5S X Penalty: two keycards missing when partner.last=P, we.keycards(t).min<=3, lho_bid, lho.last<=5S after (any auction) when dopi | ropi | depo, answered aces, rho.last=P P Defend doubled: two aces missing when partner.last=X, we.keycards(N).max<=2, lho_bid, lho.last<=5S X Penalty: two aces missing when partner.last=P, we.keycards(N).max<=2, lho_bid, lho.last<=5S == exclusion: Exclusion Blackwood: a jump to five in a void asks for keycards outside it file: conventions/slam/exclusion.bid card: slam.exclusion_blackwood.play needs: base skills: bidding_conventions/exclusion_blackwood define ex_jump(v) = (v is C, cheapest_rank(C)<=20) | (v is D, cheapest_rank(D)<=21) | (v is H, cheapest_rank(H)<=22) | (v is S, cheapest_rank(S)<=23) define ex_level(v) = ex_jump(v) | gstyle is bba define ex_zero_room(v) = (gstyle is not bba, (v is C, trump is H | trump is S) | (v is D, trump is S)) | (gstyle is bba, (v is C, trump is not C) | (v is D, trump is H | trump is S) | (v is H, trump is S)) define ex_room(v) = keycards(trump)>=3 | (keycards(trump)>=2, ex_zero_room(v)) define ex_values = slam_values | slam_values_limited define ex_keys(v) = keycards(trump)-has(A,v) define ex_s1(v) = (v is C, partner.last=5D) | (v is D, partner.last=5H) | (v is H, partner.last=5S) | (v is S, partner.last=5N) define ex_s2(v) = (v is C, partner.last=5H) | (v is D, partner.last=5S) | (v is H, partner.last=5N) | (v is S, partner.last=6C) define ex_s3(v) = (v is C, partner.last=5S) | (v is D, partner.last=5N) | (v is H, partner.last=6C) | (v is S, partner.last=6D) define ex_s4(v) = (v is C, partner.last=5N) | (v is D, partner.last=6C) | (v is H, partner.last=6D) | (v is S, partner.last=6H) define ex_d1 = partner.last=X | partner.last=XX define ex_d2 = partner.last=P define ex_partner(v) = gstyle is not bba, ex_s1(v) | ex_d1+gstyle is not bba, ex_s3(v) | ex_s4(v)+gstyle is not bba, ex_s3(v) | ex_s4(v)+gstyle is bba, ex_s2(v) | ex_d2+gstyle is bba, ex_s3(v)+gstyle is bba, ex_s3(v)+gstyle is bba, ex_s4(v)+gstyle is bba, ex_s4(v)+gstyle is bba, ex_s4(v) define ex_total(v) = keycards(trump)+ex_partner(v) define ex_queen(v) = has(Q,trump) | (gstyle is not bba, ex_s4(v)) after (any auction) when we.trump is suit, !minor_given_way, !asked 5C Exclusion: ♣ void, how many keycards outside ♣? [alert] [artificial] shows C=0, ex_values when trump is not C, ex_level(C), ex_room(C) 5D Exclusion: ♦ void, how many keycards outside ♦? [alert] [artificial] shows D=0, ex_values when trump is not D, ex_level(D), ex_room(D) 5H Exclusion: ♥ void, how many keycards outside ♥? [alert] [artificial] shows H=0, ex_values when trump is not H, ex_level(H), ex_room(H) 5S Exclusion: ♠ void, how many keycards outside ♠? [alert] [artificial] shows S=0, ex_values when trump is not S, ex_level(S), ex_room(S) after (any auction) when asked exclusion(v), rho.last=P, gstyle is not bba 5D 1 or 4 keycards outside clubs [artificial] shows ex_keys(v) in 1|4 when v is C 5H 0 or 3 keycards outside clubs [artificial] shows ex_keys(v) in 0|3 when v is C 5S 2 keycards outside clubs, no {trump} queen [artificial] shows ex_keys(v)=2, !has(Q,trump) when v is C 5N 2 keycards outside clubs and the {trump} queen [artificial] shows ex_keys(v)=2, has(Q,trump) when v is C 5H 1 or 4 keycards outside diamonds [artificial] shows ex_keys(v) in 1|4 when v is D 5S 0 or 3 keycards outside diamonds [artificial] shows ex_keys(v) in 0|3 when v is D 5N 2 keycards outside diamonds, no {trump} queen [artificial] shows ex_keys(v)=2, !has(Q,trump) when v is D 6C 2 keycards outside diamonds and the {trump} queen [artificial] shows ex_keys(v)=2, has(Q,trump) when v is D 5S 1 or 4 keycards outside hearts [artificial] shows ex_keys(v) in 1|4 when v is H 5N 0 or 3 keycards outside hearts [artificial] shows ex_keys(v) in 0|3 when v is H 6C 2 keycards outside hearts, no {trump} queen [artificial] shows ex_keys(v)=2, !has(Q,trump) when v is H 6D 2 keycards outside hearts and the {trump} queen [artificial] shows ex_keys(v)=2, has(Q,trump) when v is H 5N 1 or 4 keycards outside spades [artificial] shows ex_keys(v) in 1|4 when v is S 6C 0 or 3 keycards outside spades [artificial] shows ex_keys(v) in 0|3 when v is S 6D 2 keycards outside spades, no {trump} queen [artificial] shows ex_keys(v)=2, !has(Q,trump) when v is S 6H 2 keycards outside spades and the {trump} queen [artificial] shows ex_keys(v)=2, has(Q,trump) when v is S after (any auction) when asked exclusion(v), rho.last=P, gstyle is bba 5D 0 keycards outside clubs [artificial] shows ex_keys(v)=0 when v is C 5H 1 keycard outside clubs [artificial] shows ex_keys(v)=1 when v is C 5S 2 keycards outside clubs [artificial] shows ex_keys(v)=2 when v is C 5N 3 keycards outside clubs [artificial] shows ex_keys(v)>=3 when v is C 5H 0 keycards outside diamonds [artificial] shows ex_keys(v)=0 when v is D 5S 1 keycard outside diamonds [artificial] shows ex_keys(v)=1 when v is D 5N 2 keycards outside diamonds [artificial] shows ex_keys(v)=2 when v is D 6C 3 keycards outside diamonds [artificial] shows ex_keys(v)>=3 when v is D 5S 0 keycards outside hearts [artificial] shows ex_keys(v)=0 when v is H 5N 1 keycard outside hearts [artificial] shows ex_keys(v)=1 when v is H 6C 2 keycards outside hearts [artificial] shows ex_keys(v)=2 when v is H 6D 3 keycards outside hearts [artificial] shows ex_keys(v)>=3 when v is H 5N 0 keycards outside spades [artificial] shows ex_keys(v)=0 when v is S 6C 1 keycard outside spades [artificial] shows ex_keys(v)=1 when v is S 6D 2 keycards outside spades [artificial] shows ex_keys(v)=2 when v is S 6H 3 keycards outside spades [artificial] shows ex_keys(v)>=3 when v is S after (any auction) when asked exclusion(v), dopi, rho_bid, rho.last<=6S X DOPI: first step [artificial] shows ex_keys(v) in 1|4 when gstyle is not bba P DOPI: second step [artificial] shows ex_keys(v) in 0|3 when gstyle is not bba X DOPI: no keycard [artificial] shows ex_keys(v)=0 when gstyle is bba P DOPI: one keycard [artificial] shows ex_keys(v)=1 when gstyle is bba after (any auction) when asked exclusion(v), ropi, rho.last=X XX ROPI: first step [artificial] shows ex_keys(v) in 1|4 when gstyle is not bba P ROPI: second step [artificial] shows ex_keys(v) in 0|3 when gstyle is not bba XX ROPI: no keycard [artificial] shows ex_keys(v)=0 when gstyle is bba P ROPI: one keycard [artificial] shows ex_keys(v)=1 when gstyle is bba after (any auction) when asked exclusion(v), !rho.last=P 6{trump} Small slam: two keycards outside the void shows ex_keys(v)=2 after (any auction) when answered exclusion(v) 7{trump} Grand slam when ex_total(v)>=4, ex_queen(v) 6{trump} Small slam when ex_total(v)>=3 P Defend doubled: two keycards missing when ex_d1, partner.last=X, ex_total(v)<=2 X Penalty: two keycards missing when ex_d2, rho.last=P, lho_bid, lho.last>=5C, lho.last<=6S, ex_total(v)<=2 P To play when partner.last=5{trump}, ex_total(v)<=2 5{trump} Signoff when ex_total(v)<=2 6{trump} Small slam == four-nt-opening: 4NT opening: asks for specific aces file: conventions/slam/four-nt-opening.bid card: slam.four_nt_opening.play needs: base define fna_ace_only(x) = has(A,x) | x=1 | (has(K,x), x=2) | (has(K,x), has(Q,x), x=3) | (has(K,x), has(Q,x), has(J,x), x>=6) define fna_hand = C>=1, D>=1, H>=1, S>=1, fna_ace_only(C), fna_ace_only(D), fna_ace_only(H), fna_ace_only(S), keycards(N)>=1, keycards(N)<=3, losers+keycards(N)=4 define fna_suit(x) = x>=6, x>=S, x>=H, x>=D, x>=C define fna_left = losers-we.keycards(N).min-keycards(N) after (any auction) when opening 4N Asks for specific aces: a long suit, every loser an ace [alert] [artificial] shows fna_hand, S>=6 | H>=6 | D>=6 | C>=6 after (any auction) when asked specific_aces 5C No ace [artificial] shows keycards(N)=0 5D The diamond ace [artificial] shows keycards(N)=1, has(A,D) 5H The heart ace [artificial] shows keycards(N)=1, has(A,H) 5S The spade ace [artificial] shows keycards(N)=1, has(A,S) 6C The club ace [artificial] shows keycards(N)=1, has(A,C) 5N Two aces [artificial] shows keycards(N) in 2|3 after (any auction) when answered specific_aces 7S Grand slam when fna_suit(S), fna_left<=0 6S Small slam when fna_suit(S), fna_left<=1 P To play when fna_suit(S), partner.last=5S 5S Signoff when fna_suit(S) 6S Small slam when fna_suit(S) 7H Grand slam when fna_suit(H), fna_left<=0 6H Small slam when fna_suit(H), fna_left<=1 P To play when fna_suit(H), partner.last=5H 5H Signoff when fna_suit(H) 6H Small slam when fna_suit(H) 7D Grand slam when fna_suit(D), fna_left<=0 6D Small slam when fna_suit(D), fna_left<=1 P To play when fna_suit(D), partner.last=5D 5D Signoff when fna_suit(D) 6D Small slam when fna_suit(D) 7C Grand slam when fna_suit(C), fna_left<=0 6C Small slam when fna_suit(C), fna_left<=1 P To play when fna_suit(C), partner.last=5C 5C Signoff when fna_suit(C) 6C Small slam when fna_suit(C) == gerber: Gerber: 4♣ asks for aces over partner's notrump file: conventions/slam/gerber.bid card: slam.gerber.play needs: notrump-base skills: bidding_conventions/gerber after 1N (P) when !texas_4c, !tu 4C Gerber: how many aces? [alert] [artificial] shows balanced, points>=32-partner.hcp.min, H<=4, S<=4 when style is not bba 4C Gerber: how many aces? [alert] [artificial] shows balanced, hcp>=31-partner.hcp.min, H<=4, S<=4 when style is bba after nt2 when !tu 4C Gerber: how many aces? [alert] [artificial] shows H<=4, S<=4, (balanced, strength>=slam) | (C>=6 | (C>=5, !balanced), strength>=slam_invite) when style is not bba 4C Gerber: how many aces? [alert] [artificial] shows H<=4, S<=4, (balanced, hcp>=31-partner.hcp.min) | (C>=6, hcp>=29-partner.hcp.min) when style is bba after 3N (P) when system is brill 4C Gerber: how many aces? [alert] [artificial] shows hcp>=31-partner.hcp.min after 1x (P) 1y (P) 1N (P) | 1x (P) 1y (P) 2N (P) when !only_openings 4C Gerber: how many aces? [alert] [artificial] shows balanced, points>=32-partner.hcp.min after (any auction) when asked gerber 4D 0 or 4 aces [artificial] shows keycards(N) in 0|4 4H 1 ace [artificial] shows keycards(N)=1 4S 2 aces [artificial] shows keycards(N)=2 4N 3 aces [artificial] shows keycards(N)=3 after (any auction) when answered gerber 7N Grand slam when we.keycards(N)=4, points+partner.hcp.min>=35 5C Gerber: how many kings? [alert] [artificial] when we.keycards(N)=4, points+partner.hcp.min>=33, points+partner.hcp.min<=34, C<=5 6C Small slam when we.keycards(N)>=3, C>=6, imps 6N Small slam when we.keycards(N)>=3 4N Signoff when we.keycards(N).max<=2 6N Small slam when maybe we.keycards(N)>=3 after (any auction) when asked gerber_kings 5D 0 or 4 kings [artificial] shows controls-keycards(N)-keycards(N)=0 | controls-keycards(N)-keycards(N)=4 5H 1 king [artificial] shows controls-keycards(N)-keycards(N)=1 5S 2 kings [artificial] shows controls-keycards(N)-keycards(N)=2 5N 3 kings [artificial] shows controls-keycards(N)-keycards(N)=3 after (any auction) when answered gerber_kings 7N Grand slam when (partner.last=5N, controls-keycards(N)-keycards(N)>=1) | (partner.last=5S, controls-keycards(N)-keycards(N)>=2) | (partner.last=5H, controls-keycards(N)-keycards(N)>=3) | (partner.last=5D, controls-keycards(N)-keycards(N)>=4) 6N Small slam == kickback: Kickback: the step above four of the trump suit asks for keycards file: conventions/slam/kickback.bid needs: base skills: bidding_conventions/kickback define kickback_on = kbplay | kb1430 | kb0314 define kb_room(t) = (t is C, cheapest_rank(D)<=21) | (t is D, cheapest_rank(H)<=22) | (t is H, cheapest_rank(S)<=23) define kb_asks(t) = kickback_on, kb_room(t) define kb_spade_ask = kb_asks(H), trump is H define kb_first_14 = !kb0314 after (any auction) when kickback_on, we.trump is suit, !minor_given_way, !asked, we.forcing=none | we.forcing=round 4D Kickback: keycard ask in ♣ [alert] [artificial] when trump is C, kb_room(C), slam_values_limited, !two_bare_suits 4H Kickback: keycard ask in ♦ [alert] [artificial] when trump is D, kb_room(D), slam_values_limited, !two_bare_suits 4S Kickback: keycard ask in ♥ [alert] [artificial] when trump is H, kb_room(H), slam_values_limited, !two_bare_suits after (any auction) when kickback_on, we.trump is suit, !minor_given_way, !asked, we.forcing=game, !answered control 4D Kickback: keycard ask in ♣ [alert] [artificial] when trump is C, kb_room(C), slam_values 4H Kickback: keycard ask in ♦ [alert] [artificial] when trump is D, kb_room(D), slam_values 4S Kickback: keycard ask in ♥ [alert] [artificial] when trump is H, kb_room(H), slam_values after (any auction) when kickback_on, we.trump is suit, asked control(t), trump is H 4S Kickback: keycard ask in ♥ [alert] [artificial] when kb_room(H), all_covered after (any auction) when kickback_on, we.trump is suit, answered control(t), partner.last=4H, trump is H 4S Kickback: keycard ask in ♥ [alert] [artificial] when kb_room(H), all_covered_by_us after (any auction) when kickback_on, asked kickback(t), rho.last=P 4H Kickback: 1 or 4 keycards [artificial] shows keycards(t) in 1|4 when t is C, kb_first_14 4H Kickback: 0 or 3 keycards [artificial] shows keycards(t) in 0|3 when t is C, !kb_first_14 4S Kickback: 0 or 3 keycards [artificial] shows keycards(t) in 0|3 when t is C, kb_first_14 4S Kickback: 1 or 4 keycards [artificial] shows keycards(t) in 1|4 when t is C, !kb_first_14 4N Kickback: 2 or 5 keycards, no {t} queen [artificial] shows keycards(t) in 2|5, !has(Q,t) when t is C 5C Kickback: 2 or 5 keycards and the {t} queen [artificial] shows keycards(t) in 2|5, has(Q,t) when t is C 4S Kickback: 1 or 4 keycards [artificial] shows keycards(t) in 1|4 when t is D, kb_first_14 4S Kickback: 0 or 3 keycards [artificial] shows keycards(t) in 0|3 when t is D, !kb_first_14 4N Kickback: 0 or 3 keycards [artificial] shows keycards(t) in 0|3 when t is D, kb_first_14 4N Kickback: 1 or 4 keycards [artificial] shows keycards(t) in 1|4 when t is D, !kb_first_14 5C Kickback: 2 or 5 keycards, no {t} queen [artificial] shows keycards(t) in 2|5, !has(Q,t) when t is D 5D Kickback: 2 or 5 keycards and the {t} queen [artificial] shows keycards(t) in 2|5, has(Q,t) when t is D 4N Kickback: 1 or 4 keycards [artificial] shows keycards(t) in 1|4 when t is H, kb_first_14 4N Kickback: 0 or 3 keycards [artificial] shows keycards(t) in 0|3 when t is H, !kb_first_14 5C Kickback: 0 or 3 keycards [artificial] shows keycards(t) in 0|3 when t is H, kb_first_14 5C Kickback: 1 or 4 keycards [artificial] shows keycards(t) in 1|4 when t is H, !kb_first_14 5D Kickback: 2 or 5 keycards, no {t} queen [artificial] shows keycards(t) in 2|5, !has(Q,t) when t is H 5H Kickback: 2 or 5 keycards and the {t} queen [artificial] shows keycards(t) in 2|5, has(Q,t) when t is H after (any auction) when kickback_on, answered kickback(t) 7{t} Grand slam when we.keycards(t)=5, has(Q,t) | partner.last=5{t}, grand_try, !kask5n 5N King ask: all keycards and the {t} queen held [artificial] when kask5n, we.keycards(t)=5, has(Q,t) | partner.last=5{t} 6{t} Small slam when we.keycards(t)>=4 7{t} Grand slam when kc_high(t), we.keycards(t).max=5, has(Q,t) | partner.last=5{t}, grand_try, !kask5n 5N King ask: all keycards and the {t} queen held [artificial] when kask5n, kc_high(t), we.keycards(t).max=5, has(Q,t) | partner.last=5{t} 6{t} Small slam when kc_high(t) P To play when partner.last=5{t}, we.keycards(t).max<=3 5{t} Signoff when we.keycards(t).max<=3 5{t} Signoff when maybe we.keycards(t)>=4 after (any auction) when kickback_on, asked kb_correct(t) 6{t} Corrects to six: the higher count shows keycards(t) in 3|4|5 P Accepts the sign-off == minorwood: Minorwood: four of the agreed minor asks for keycards file: conventions/slam/minorwood.bid needs: base skills: bidding_conventions/minorwood define mw_room(t) = (t is C, cheapest_rank(C)<=20) | (t is D, cheapest_rank(D)<=21) define mw_asks(t) = mwplay, !kickback_on, mw_room(t) after (any auction) when mwplay, !kickback_on, we.trump is suit, !minor_given_way, !asked, we.forcing=game, !answered control 4C Minorwood: keycard ask in ♣ [alert] [artificial] when trump is C, mw_room(C), slam_values 4D Minorwood: keycard ask in ♦ [alert] [artificial] when trump is D, mw_room(D), slam_values after (any auction) when mwplay, !kickback_on, we.trump is suit, !minor_given_way, !asked, !they.bid, we.forcing=none | we.forcing=round 4C Minorwood: keycard ask in ♣ [alert] [artificial] when trump is C, mw_room(C), slam_values_limited, !two_bare_suits 4D Minorwood: keycard ask in ♦ [alert] [artificial] when trump is D, mw_room(D), slam_values_limited, !two_bare_suits after (any auction) when mwplay, asked minorwood(t), rho.last=P 4D Minorwood: 1 or 4 keycards [artificial] shows keycards(t) in 1|4 when t is C, kc_first_14(t) 4D Minorwood: 0 or 3 keycards [artificial] shows keycards(t) in 0|3 when t is C, !kc_first_14(t) 4H Minorwood: 0 or 3 keycards [artificial] shows keycards(t) in 0|3 when t is C, kc_first_14(t) 4H Minorwood: 1 or 4 keycards [artificial] shows keycards(t) in 1|4 when t is C, !kc_first_14(t) 4S Minorwood: 2 or 5 keycards, no {t} queen [artificial] shows keycards(t) in 2|5, !has(Q,t) when t is C 4N Minorwood: 2 or 5 keycards and the {t} queen [artificial] shows keycards(t) in 2|5, has(Q,t) when t is C 4H Minorwood: 1 or 4 keycards [artificial] shows keycards(t) in 1|4 when t is D, kc_first_14(t) 4H Minorwood: 0 or 3 keycards [artificial] shows keycards(t) in 0|3 when t is D, !kc_first_14(t) 4S Minorwood: 0 or 3 keycards [artificial] shows keycards(t) in 0|3 when t is D, kc_first_14(t) 4S Minorwood: 1 or 4 keycards [artificial] shows keycards(t) in 1|4 when t is D, !kc_first_14(t) 4N Minorwood: 2 or 5 keycards, no {t} queen [artificial] shows keycards(t) in 2|5, !has(Q,t) when t is D 5C Minorwood: 2 or 5 keycards and the {t} queen [artificial] shows keycards(t) in 2|5, has(Q,t) when t is D after (any auction) when mwplay, answered minorwood(t) 7{t} Grand slam when we.keycards(t)=5, has(Q,t) | (t is C, partner.last=4N) | (t is D, partner.last=5C), grand_try, !kask5n 5N King ask: all keycards and the {t} queen held [artificial] when kask5n, we.keycards(t)=5, has(Q,t) | (t is C, partner.last=4N) | (t is D, partner.last=5C) 6{t} Small slam when we.keycards(t)>=4 7{t} Grand slam when kc_high(t), we.keycards(t).max=5, has(Q,t) | (t is C, partner.last=4N) | (t is D, partner.last=5C), grand_try, !kask5n 5N King ask: all keycards and the {t} queen held [artificial] when kask5n, kc_high(t), we.keycards(t).max=5, has(Q,t) | (t is C, partner.last=4N) | (t is D, partner.last=5C) 6{t} Small slam when kc_high(t) 5{t} Signoff when we.keycards(t).max<=3 5{t} Signoff when maybe we.keycards(t)>=4 after (any auction) when mwplay, asked mw_correct(t) 6{t} Corrects to six: the higher count shows keycards(t) in 3|4|5 P Accepts the sign-off == over-3nt: Slam after partner's 3NT file: conventions/slam/over-3nt.bid needs: base skills: partnership_bidding/slam_bidding define texas_3n = partner.hcp.min>=24, partner.bids>=2 after (any auction) when partner.last=3N, !they.bid, we.trump is none 6N Small slam shows hcp+partner.hcp.min>=34 4N Quantitative: invites 6NT shows hcp+partner.hcp.min>=32, hcp+partner.hcp.max<=35 when q4n 4C Slam try: six or more clubs shows C>=6, hcp+partner.hcp.min>=31 when !(texas_3n, tu) 4D Slam try: six or more diamonds shows D>=6, hcp+partner.hcp.min>=31 when !(texas_3n, texas | tu) 4S To play: a self-sufficient ♠ suit shows (S>=6, quality(S)=3, top5(S)>=4) | (S>=7, quality(S)=3), (H<=2, !stop(H)) | (D<=2, !stop(D)) | (C<=2, !stop(C)) 4H To play: a self-sufficient ♥ suit shows (H>=6, quality(H)=3, top5(H)>=4) | (H>=7, quality(H)=3), (S<=2, !stop(S)) | (D<=2, !stop(D)) | (C<=2, !stop(C)) when !(texas_3n, texas, !tu) after (any auction) when asked slam_try(m), partner.last=4{m}, we.trump is none 6{m} Small slam: a fit shows m>=3 4N No fit shows m<=2 after (any auction) when answered slam_try(m), partner.last=4N 6N Small slam shows hcp+partner.hcp.min>=34 P To play after 1x (P) 1y (P) 2z (P) when z is not x, z is not y 6N Small slam shows points+partner.points.min>=33, !shortest<=1 4N Quantitative: invites 6NT shows points+partner.points.min>=31, points+partner.points.max<=36, !shortest<=1 when q4n, no_ask after 1x (P) 1y (P) 1z (P) 6N Small slam shows points+partner.points.min>=33, !shortest<=1 4N Quantitative: invites 6NT shows points+partner.points.min>=31, points+partner.points.max<=36, !shortest<=1 when q4n, no_ask after 1x (P) 2y (P) 2z (P) when z is not x, z is not y 6N Small slam shows points+partner.points.min>=33, !shortest<=1 4N Quantitative: invites 6NT shows points+partner.points.min>=31, points+partner.points.max<=36, !shortest<=1 when q4n, no_ask == pick-a-slam: Pick-a-slam 5NT: choose among the slams file: conventions/slam/pick-a-slam.bid card: slam.pick_a_slam_5nt.play needs: base skills: bidding_conventions/pick_a_slam_5nt define pas_fit(x) = we.fit(x).min>=8 define pas_two_fits = (pas_fit(S), pas_fit(H)) | (pas_fit(S), pas_fit(D)) | (pas_fit(S), pas_fit(C)) | (pas_fit(H), pas_fit(D)) | (pas_fit(H), pas_fit(C)) | (pas_fit(D), pas_fit(C)) after (any auction) when !asked | asked stoppers, partner_bid, partner.last<=4S, rho.last=P | (rho_bid, rho.last<=4S) 5N Pick a slam: choose the strain [alert] [artificial] shows points+partner.points.min>=33, hcp+partner.hcp.min>=30, pas_two_fits after (any auction) when asked pick_slam 6S Pick a slam: spades when we.fit(S).min>=8 6H Pick a slam: hearts when we.fit(H).min>=8 6D Pick a slam: diamonds when we.fit(D).min>=8 6C Pick a slam: clubs when we.fit(C).min>=8 6N Pick a slam: notrump after (any auction) when answered pick_slam P To play == rkcb-1430: Roman Keycard Blackwood (1430; 0314 as a treatment) file: conventions/slam/rkcb-1430.bid needs: base skills: bidding_conventions/roman_keycard, partnership_bidding/roman_key_card define read_only = bare(C), !bare(C) define side_kings(t) = controls-keycards(N)-keycards(N)-has(K,t) define partner_side_kings = partner.last=6D+partner.last=6H+partner.last=6H+partner.last=6S+partner.last=6S+partner.last=6S define our_side_kings(t) = side_kings(t)+partner_side_kings define king_held(s) = has(K,s) | partner.last=6{s} define kings_unheld(t) = !(t is C | king_held(C))+!(t is D | king_held(D))+!(t is H | king_held(H))+!(t is S | king_held(S)) define king_margin(t) = hcp+partner.hcp.min>=33, C<=1 | D<=1 | H<=1 | S<=1 | t>=6 | partner.t.min>=6 after (any auction) when k1430 | k0314, we.trump is suit, !minor_given_way, !asked, we.forcing=none | we.forcing=round, !kb_asks(trump), !mw_asks(trump) 4N Keycard ask in {trump} [artificial] when slam_values_limited, !two_bare_suits after (any auction) when k1430 | k0314, we.trump is suit, !minor_given_way, !asked, we.forcing=game, !answered control, !kb_asks(trump), !mw_asks(trump) 4N Keycard ask in {trump} [artificial] when slam_values after (any auction) when k1430 | k0314, we.trump is none, !asked, !they.bid 4N Keycard ask in ♠ [artificial] when shown_fit(S), we.fit(S).min>=8, fit_slam_values(S), !two_bare_beside(S) 4N Keycard ask in ♥ [artificial] when shown_fit(H), we.fit(H).min>=8, fit_slam_values(H), !two_bare_beside(H) 4N Keycard ask in ♠ [artificial] when kc_open(S), !shown_fit(S), !shown_fit(H), we.fit(S).min>=8, fit_slam_values(S), !two_bare_beside(S) 4N Keycard ask in ♥ [artificial] when kc_open(H), !shown_fit(S), !shown_fit(H), we.fit(H).min>=8, fit_slam_values(H), !two_bare_beside(H) 4N Keycard ask in ♦ [artificial] when kc_open(D), !shown_fit(S), !shown_fit(H), we.fit(D).min>=8, fit_slam_values(D), !two_bare_beside(D), hcp+partner.hcp.min>=30 4N Keycard ask in ♣ [artificial] when kc_open(C), !shown_fit(S), !shown_fit(H), we.fit(C).min>=8, fit_slam_values(C), !two_bare_beside(C), hcp+partner.hcp.min>=30 after (any auction) when k1430 | k0314, we.trump is none, !asked, they.bid 4N Keycard ask in ♠ [artificial] when kc_open(S) | shown_fit(S), read_only 4N Keycard ask in ♥ [artificial] when kc_open(H) | shown_fit(H), !shown_fit(S), read_only 4N Keycard ask in ♦ [artificial] when kc_open(D), !shown_fit(S), !shown_fit(H), read_only 4N Keycard ask in ♣ [artificial] when kc_open(C), !shown_fit(S), !shown_fit(H), read_only after (any auction) when k1430 | k0314, we.trump is suit, they.bid, asked signoff 4N Keycard ask in {trump} [artificial] when read_only after (any auction) when k1430 | k0314, minor_given_way, !asked 4N Keycard ask in ♠ [artificial] when major_over_minor(S), fit_slam_values(S), !two_bare_beside(S) 4N Keycard ask in ♥ [artificial] when major_over_minor(H), !major_over_minor(S), fit_slam_values(H), !two_bare_beside(H) after (any auction) when k1430 | k0314, we.trump is suit, asked control(t), !kb_asks(trump) 4N Keycard ask in {trump} [artificial] when all_covered 6{trump} Small slam when all_covered, slam_values, partner.last>=5C after (any auction) when k1430 | k0314, we.trump is suit, answered control(t), partner.last=4{trump}, !kb_asks(trump) 4N Keycard ask in {trump} [artificial] when all_covered_by_us after (any auction) when k1430 | k0314, asked keycards(t) 5C 1 or 4 keycards [artificial] shows keycards(t) in 1|4 when gstyle is not bba, !m0314 | t is H | t is S 5D 0 or 3 keycards [artificial] shows keycards(t) in 0|3 when gstyle is not bba, !m0314 | t is H | t is S 5C 0 or 3 keycards [artificial] shows keycards(t) in 0|3 when gstyle is not bba, m0314, t is C | t is D 5D 1 or 4 keycards [artificial] shows keycards(t) in 1|4 when gstyle is not bba, m0314, t is C | t is D 5C 1 or 4 keycards [artificial] shows keycards(t) in 1|4 when gstyle is bba, !k0314 5D 0 or 3 keycards [artificial] shows keycards(t) in 0|3 when gstyle is bba, !k0314 5C 0 or 3 keycards [artificial] shows keycards(t) in 0|3 when gstyle is bba, k0314 5D 1 or 4 keycards [artificial] shows keycards(t) in 1|4 when gstyle is bba, k0314 5H 2 or 5 keycards, no {t} queen [artificial] shows keycards(t) in 2|5, !has(Q,t) 5S 2 or 5 keycards and the {t} queen [artificial] shows keycards(t) in 2|5, has(Q,t) after (any auction) when k1430 | k0314, answered keycards(t) 7{t} Grand slam when we.keycards(t)=5, has(Q,t) | partner.has(Q,t) | partner.last=5S, grand_try, !kask5n 5N King ask: all keycards and the {t} queen held [artificial] when kask5n, we.keycards(t)=5, has(Q,t) | partner.has(Q,t) | partner.last=5S 6{t} Small slam when we.keycards(t)>=4 7{t} Grand slam when kc_high(t), we.keycards(t).max=5, has(Q,t) | partner.last=5S, grand_try, !kask5n 5N King ask: all keycards and the {t} queen held [artificial] when kask5n, kc_high(t), we.keycards(t).max=5, has(Q,t) | partner.last=5S 6{t} Small slam when kc_high(t) P To play when partner.last=5{t}, we.keycards(t).max<=3 5{t} Signoff when we.keycards(t).max<=3 5{t} Signoff when maybe we.keycards(t)>=4 6{t} Small slam after (any auction) when kask5n, asked kings(t), !kspec | t is C | t is D 6C No king [artificial] shows side_kings(t)=0 6D One king [artificial] shows side_kings(t)=1 6H Two kings [artificial] shows side_kings(t)=2 6S Three kings [artificial] shows side_kings(t)=3 after (any auction) when kask5n, answered kings(t), !kspec | t is C | t is D 7{t} Grand slam when our_side_kings(t)>=3 7{t} Grand slam when our_side_kings(t)>=2, hcp+partner.hcp.min>=33, C<=1 | D<=1 | H<=1 | S<=1 | t>=6 | partner.t.min>=6 P To play when partner.last=6{t} 6{t} Small slam 6N Small slam after (any auction) when kask5n, kspec, asked kings(t), t is H | t is S 6C The club king [artificial] shows has(K,C) when t is not C 6D The diamond king, not the club king [artificial] shows has(K,D), !has(K,C) when t is H | t is S 6H The heart king, no club or diamond king [artificial] shows has(K,H), !has(K,C), !has(K,D) when t is S 6{t} No side king below {t} shows !has(K,C), !has(K,D), t is not S | !has(K,H) after (any auction) when kask5n, kspec, answered kings(t), t is H | t is S 6D Asks for the diamond king [alert] [artificial] when t is H | t is S, !king_held(D), kings_unheld(t)=1 | (kings_unheld(t)=2, king_margin(t)) 6H Asks for the heart king [alert] [artificial] when t is S, !king_held(H), kings_unheld(t)=1 | (kings_unheld(t)=2, king_margin(t)) 6S Asks for the spade king [alert] [artificial] when t is H, !king_held(S), king_held(D) | !partner.last=6C, kings_unheld(t)=1 | (kings_unheld(t)=2, king_margin(t)) 7{t} Grand slam when kings_unheld(t)=0 | (kings_unheld(t)=1, king_margin(t)) P To play when partner.last=6{t} 6{t} Small slam 6N Small slam after (any auction) when kspec, asked king_in(z) 7{trump} The {z} king shows has(K,z) 6H No diamond king; the heart king [artificial] shows !has(K,D), has(K,H) when z is D, we.trump is S 6{trump} Neither king shows !has(K,z) 6N No spade king [artificial] shows !has(K,S) when z is S, we.trump is H after (any auction) when kspec, answered king_in(z) P To play when partner.last=7{trump} | partner.last=6{trump} | partner.last=6N 6{trump} Small slam after (any auction) when k1430 | k0314, asked keycard_correct(t) 6{t} Corrects to six: the higher count shows keycards(t) in 3|4|5 P Accepts the sign-off == serious-3nt: Non-serious 3NT before control bids in a major-fit game force file: conventions/slam/serious-3nt.bid needs: base skills: bidding_conventions/serious_3nt define ns_position = partner.last=3{trump}, !our_notrump define ns_count(t) = (longer(t), count_long(t)>=28) | (longer(t), count_long_p(t)>=28) | (shorter(t), count_short(t)>=29) | (shorter(t), count_short_l(t)>=29) | (!longer(t), !shorter(t), count_equal(t)>=30) | (!longer(t), !shorter(t), count_equal_p(t)>=30) after (any auction) when nsplay, cue, we.trump is suit, trump is H | trump is S, we.forcing=game, !asked, !answered control 3N Non-serious 3NT: mild slam interest [alert] [artificial] shows ns_count(trump) when ns_position, !slam_values after (any auction) when nsplay, cue, asked ns3nt(t) cheapest(C) Control bid in ♣ [alert] [artificial] when t is not C, under_game(C), slam_interest(t), controlled(C) cheapest(D) Control bid in ♦ [alert] [artificial] when t is not D, under_game(D), slam_interest(t), controlled(D) cheapest(H) Control bid in ♥ [alert] [artificial] when t is not H, under_game(H), slam_interest(t), controlled(H) 4N Keycard ask in {t} [artificial] when k1430 | k0314, slam_values, !side_suit_uncontrolled 4{t} Signoff: no slam interest == slam-catch: Game or slam once a trump suit is agreed file: conventions/slam/slam-catch.bid needs: base skills: partnership_bidding/slam_bidding after (any auction) when we.trump is suit, we.forcing=game, !asked 4{trump} Signoff when trump is H | trump is S == slam-entry: Slam entry: the conditions the slam modules share file: conventions/slam/slam-entry.bid skills: partnership_bidding/slam_bidding define longer(t) = t>partner.t.min define shorter(t) = t=29) | (longer(t), count_long_p(t)>=29) | (shorter(t), count_short(t)>=31) | (shorter(t), count_short_l(t)>=31) | (!longer(t), !shorter(t), count_equal(t)>=31) | (!longer(t), !shorter(t), count_equal_p(t)>=31) define slam_count(t) = (longer(t), count_long(t)>=30) | (longer(t), count_long_p(t)>=30) | (shorter(t), count_short(t)>=31) | (shorter(t), count_short_l(t)>=31) | (!longer(t), !shorter(t), count_equal(t)>=32) | (!longer(t), !shorter(t), count_equal_p(t)>=32) define slam_count_max(t) = (longer(t), count_long_max(t)>=31) | (shorter(t), count_short_max(t)>=32) | (!longer(t), !shorter(t), count_equal_max(t)>=33) define slam_values = slam_count(trump) | (tp(trump)>=18, !shown.hcp.max-shown.hcp.min<=4) define slam_values_limited = slam_count_max(trump), losers<=4 define controlled(x) = has(A,x) | (x<=0, partner.x.min<=3) | (style is first_or_second_round, has(K,x) | (x<=1, partner.x.min<=3)) define first_round(x) = has(A,x) | (x<=0, partner.x.min<=3) define side_suit_uncontrolled = (trump is not C, !controlled(C)) | (trump is not D, !controlled(D)) | (trump is not H, !controlled(H)) | (trump is not S, !controlled(S)) define two_bare_suits = (bare(C), bare(D)) | (bare(C), bare(H)) | (bare(C), bare(S)) | (bare(D), bare(H)) | (bare(D), bare(S)) | (bare(H), bare(S)) define promised(x) = trump is x | !partner.denied(x) | controlled(x) define denials_promised = promised(C), promised(D), promised(H), promised(S) define promised_first(x) = trump is x | !partner.denied(x) | first_round(x) define denials_promised_first = promised_first(C), promised_first(D), promised_first(H), promised_first(S) define covered(x) = trump is x | controlled(x) | partner.cued(x) | me.denied(x) define all_covered = covered(C), covered(D), covered(H), covered(S) define covered_by_us(x) = trump is x | controlled(x) | partner.cued(x) define all_covered_by_us = covered_by_us(C), covered_by_us(D), covered_by_us(H), covered_by_us(S) define shown_fit(x) = agreed_fit(x) | partner.x.min>=6 define shown_eight(x) = shown.x.min+partner.x.min>=8 define major_over_minor(x) = x is S | x is H, trump is C | trump is D, shown_eight(x) define minor_given_way = major_over_minor(S) | major_over_minor(H) define our_notrump = we.named(N) | !maybe !partner.balanced | !maybe !shown.balanced define last_suit(x) = partner_named(x), partner.x.min>=2 define no_shown_eight = !shown_eight(S), !shown_eight(H), !shown_eight(D), !shown_eight(C) define quant_4nt = q4n define kc_shown(x) = shown_eight(x), x is S | !shown_eight(S), x is S | x is H | !shown_eight(H), x is S | x is H | x is D | !shown_eight(D) define kc_open(x) = kc_shown(x) | (no_shown_eight, !our_notrump, last_suit(x)) define fit_slam_values(x) = slam_count(x) | (slam_count_max(x), losers<=4, partner.points.max-partner.points.min<=6) define bare_beside(x, t) = x is not t, x>=2, !has(A,x), !has(K,x) define two_bare_beside(t) = (bare_beside(C,t), bare_beside(D,t)) | (bare_beside(C,t), bare_beside(H,t)) | (bare_beside(C,t), bare_beside(S,t)) | (bare_beside(D,t), bare_beside(H,t)) | (bare_beside(D,t), bare_beside(S,t)) | (bare_beside(H,t), bare_beside(S,t)) define kc_high(t) = maybe we.keycards(t)>=4, hcp+partner.hcp.min>=30 define slam_interest(x) = slam_count_interest(x) define no_ask = !bw, !k1430, !k0314 define direct_count(t) = (longer(t), count_long(t)>=28, count_long(t)+controls>=35) | (longer(t), count_long_p(t)>=28, count_long_p(t)+controls>=35) | (shorter(t), count_short(t)>=28, count_short(t)+controls>=35) | (shorter(t), count_short_l(t)>=28, count_short_l(t)+controls>=35) | (!longer(t), !shorter(t), count_equal(t)>=28, count_equal(t)+controls>=35) | (!longer(t), !shorter(t), count_equal_p(t)>=28, count_equal_p(t)+controls>=35) define direct_slam_values = direct_count(trump) after (any auction) when we.named(N), we.trump is none, !asked, !they.bid, no_shown_eight 4N Quantitative: invites 6NT shows points+partner.points.min>=31, points+partner.points.min<=32 when q4n after (any auction) when we.forcing=game, we.trump is none, !asked, !game_reached, !they.bid, !we.systems_on cheapest(S) Agrees ♠: slam interest shows we.fit(S).min>=8, slam_interest(S) when partner.S.min>=3, under_game(S) cheapest(H) Agrees ♥: slam interest shows we.fit(H).min>=8, slam_interest(H) when partner.H.min>=3, under_game(H) after (any auction) when we.trump is suit, !minor_given_way, !they.bid, !asked, no_ask 6{trump} Small slam shows direct_slam_values after (any auction) when minor_given_way, !they.bid, !asked, no_ask 6S Small slam shows direct_count(S) when major_over_minor(S) 6H Small slam shows direct_count(H) when major_over_minor(H), !major_over_minor(S) after (any auction) when we.trump is none, !they.bid, !asked, no_ask, !shown.hcp.max-shown.hcp.min<=4 6S Small slam shows we.fit(S).min>=8, direct_count(S) 6H Small slam shows we.fit(H).min>=8, direct_count(H) 6D Small slam shows we.fit(D).min>=8, direct_count(D) 6C Small slam shows we.fit(C).min>=8, direct_count(C) == spiral: Spiral 2NT: how many trumps, minimum or maximum, after 1X-1M-2M file: conventions/slam/spiral.bid needs: base skills: bidding_conventions/spiral define sp_max = hcp>=14 after 1x (P) 1M (P) 2M (P) when spiral, x is not M 2N Spiral: how many {M}, minimum or maximum? [alert] [artificial] shows M>=4, tp(M)=11..12 after (any auction) when spiral, asked spiral(M), rho.last=P 3C Spiral: three {M}, minimum [artificial] shows M=3, !sp_max 3D Spiral: three {M}, maximum [artificial] shows M=3, sp_max 3H Spiral: four {M}, minimum [artificial] shows M>=4, !sp_max 3S Spiral: four {M}, maximum [artificial] shows M>=4, sp_max 3N Spiral: 4-3-3-3 with four {M}, maximum [artificial] shows M=4, shape 4333, sp_max after (any auction) when spiral, answered spiral(M) 4M To play when partner.last=3D | partner.last=3S | partner.last=3N 3N To play: balanced when partner.last=3D, M=4, balanced P To play: balanced when partner.last=3N, M=4, balanced 3M Signoff when partner.last=3C | (partner.last=3H, M is S) P Signoff when partner.last=3H, M is H